2015-11-19 20 views
6

staram się akceptować std :: initializer_list do rodzajowego konstruktora tak:std :: initializer_list dwuznaczność w Visual Studio

template<typename T> 
class Test{ 
    std::vector<T> V; 

    Test(std::initializer_list<T>& list) : V(list){} 

}; 

użyciu

Test<int> test{ 1, 2, 3, 4 }; 

Ale pojawia się błąd:

error C2440: 'initializing' : cannot convert from 'initializer-list' to 'Test<int>' No constructor could take the source type, or constructor overload resolution was ambiguous 

Po prostu nie jestem pewien, co robię źle tutaj.

+3

Wygląda na to, że VS było dojrzałe, ładne. Nie wydaje się już pozwalać na wiązanie "&" do tymczasowych. –

+0

Snarky, ale wezmę to. Dzięki. –

Odpowiedz

4
Test(std::initializer_list<T>& list) : V(list){} 

Dzieje się std::initializer_list przez const odniesienia, ale spróbuj powiązać tymczasowy do tego, co jest nielegalne

std::initializer_list ma być lekka, więc można po prostu przekazać go przez wartość :

Test(std::initializer_list<T> list) : V(list){} 
//       ^no & 
Powiązane problemy