2015-11-19 7 views
6

私は:: STDを受け入れるためにそうような一般的なコンストラクタにinitializer_listしようとしている:のstd :: Visual Studioでinitializer_list曖昧

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

を使用して

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

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

}; 

をしかし、私はエラーを取得します:

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

ここで間違っていることはわかりません。

+3

VSは成熟した、いいです。それはもはや一時的なものへのバインディング '&'を許可していないようです。 –

+0

スネーキー、私はそれを取る。ありがとう。 –

答えて

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

これは非const参照によってstd::initializer_listがかかりますが、あなただけの値で、それを渡すことができるようにあなたがして、

std::initializer_list

は軽量に設計されて違法である、それを一時的にバインドしてみてください:

Test(std::initializer_list<T> list) : V(list){} 
//       ^no & 
関連する問題