Czy można wnioskować o parametrach szablonu krotki z inicjalizacji typu nawiasowego?

W tym przykładzie możliwe jest odjęcie rodzaju parametrów szablonutuple?

#include<tuple>
#include<string>

template<class T1, class T2>
void fun(std::tuple<T1, T2> t, std::string other){}

int main(){
    fun(std::tuple<double, int>(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<T1, T2> t)
}

Dodałem drugi argumentother aby uniknąć rozwiązań zawierających zmienne argumenty na poziomie funkcjifun. Ponadto staram się unikać używaniamake_tuple, przynajmniej z kodu użytkownika (tj. wmain()). W rzeczywistości nie musi to byćtuple wpisz ten, który jest zaangażowany, o ile dozwolona jest „pożądana składnia”, a jej typy elementów można wywnioskować na późniejszym etapie.

(Również, choć podobne, to nie ma z tym nic wspólnegoinitializer_list ponieważ nie działa w ogóle, mając odmienne elementy w nawiasach klamrowych)

Co najmniej się nie udajeclang 3.2 igcc 4.7.2. Czy istnieje nadzieja, że ​​zadziała z obecnym lub prawie przyszłym standardem? (np. przyszłość (?)initializer_tuple.)

(Może to być bardzo przydatne, aby dodać ekspresyjność do wywołań funkcji, agregując podelementy, ale można o tym dyskutować)

Uwaga: dla przykładowego kodu wydaje się, żestd::forward_as_tuple jest bardziej odpowiedni niżstd::make_tuple więc argumenty niekoniecznie są kopiowane:http://en.cppreference.com/w/cpp/utility/tuple/forward_as_tuple . Nadal nie jest tak miło, jak gdyby istniała wbudowana funkcja języka dla heterogenicznych list inicjatorów.

questionAnswers(1)

yourAnswerToTheQuestion