Можно ли вывести параметры шаблона кортежа из инициализации типа фигурных скобок?

В этом примере возможно ли разрешить вывод параметров шаблона типа?tuple

#include
#include

template
void fun(std::tuple t, std::string other){}

int main(){
    fun(std::tuple(2.,3), std::string("other")); // ok
    fun(std::make_tuple(2.,3), std::string("other")); // ok, but trying to avoid `make_tuple`
    fun({2.,3},std::string("other")); // desired syntax but
    // giving compilation error: candidate template ignored: couldn't infer template argument 'T1' void fun(std::tuple t)
}

Я добавил второй аргументother избегать решений, включающих вариационные аргументы на уровне функцииfun, Также я стараюсь избегать использованияmake_tupleпо крайней мере из кода пользователя (т.е. вmain()). На самом деле это не такдолжно бытьtuple введите тот, который участвует, пока "желаемый синтаксис " разрешено и как-то его типы элементов могут быть выведены на более позднем этапе.

(Также, хотя и похоже, это не имеет ничего общего сinitializer_list так как это нет работает вообще с разными элементами в скобках)

Это по крайней мере сclang 3.2 а такжеgcc 4.7.2, Есть ли надежда, что он будет работать с текущим или ближайшим стандартом? (например, будущее (?)initializer_tuple.)

(Это может быть очень полезно для добавления выразительности к вызовам функций путем агрегирования подэлементов, но об этом можно поспорить)

Примечание: для примера кода кажется, чтоstd::forward_as_tuple более уместно, чемstd::make_tuple поэтому аргументы не обязательно копируются:http://en.cppreference.com/w/cpp/utility/tuple/forward_as_tuple , Все еще не так хорошо, как если бы была встроенная языковая функция для разнородных списков инициализаторов.

 alfC04 июн. 2013 г., 08:30
Видимо нет абсолютно никакого пути (так). У кого-нибудь есть какие-либо комментарии о добавленииinitializer_tuple особенность языка?

Ответы на вопрос(1)

Решение Вопроса

Нет, нет абсолютно никакого способа. Вычет не выполняется, если типы элементов не относятся к одному типу. И никакого вычета не делается вообще, если параметр не являетсяstd::initializer_list в любом случае (ты прав, чтоinitializer_list Безразлично»Я не имею ничего общего с предоставляемыми вами брекетами, но это простое правило для удержания на работе).

Значения параметров шаблона должны выводиться с помощью других положений параметров функции, в которые они входят, или должны указываться явно.

 alfC23 мая 2013 г., 21:07
Я понимаю, что ваш ответ - это утверждение об ограничении языка, а не само ограничениеtuple или что-то реализовано вinitializer_list, право? Таким образом, абсолютно теперь способ, даже используя другой тип, подобный кортежу? Я'придется подождать до C ++ 2X, тогда кажется.

Ваш ответ на вопрос