Код: Выделить всё
#include
#include
template
void fun(std::tuple t, std::string other){}
int main(){
fun(std::tuple(2.0, 3), std::string("other")); // ok
fun(std::make_tuple(2.0, 3), std::string("other")); // ok, but trying to avoid `make_tuple`
fun({2.0, 3},std::string("other")); // desired syntax but
// giving compilation error: candidate template ignored: couldn't infer template argument 'T1' void fun(std::tuple t)
}
(Кроме того, хотя это и похоже, это не имеет ничего общего с инициализатором_list, поскольку он вообще не работает с разными элементами в фигурных скобках)
Это не работает, по крайней мере, с clang 3.2 и gcc 4.7.2. Есть ли надежда, что он будет работать с текущим или будущим стандартом? (например, Future(?) Initializer_tuple.)
(Это может быть очень полезно для добавления выразительности вызовам функций путем агрегирования подэлементов, но с этим можно поспорить)< /p>
Примечание. Для примера кода кажется, что std::forward_as_tuple более подходит, чем std::make_tuple, поэтому аргументы не обязательно копируются: http://en.cppreference.com/w/cpp/utilit ... d_as_tuple. Все равно это не так хорошо, как если бы существовала встроенная языковая функция для разнородных списков инициализаторов.
Подробнее здесь: https://stackoverflow.com/questions/167 ... nitializat
Мобильная версия