2015-11-19 37 views
6

Tôi đang cố gắng để chấp nhận một std :: initializer_list vào một constructor chung chung như vậy:std :: nhập nhằng initializer_list trong Visual Studio

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

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

}; 

sử dụng

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

Nhưng tôi nhận được lỗi:

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

Tôi không chắc mình đang làm gì sai ở đây.

+3

VS dường như đã trưởng thành, tốt đẹp. Nó không còn dường như cho phép ràng buộc '&' với thời gian. –

+0

Snarky, nhưng tôi sẽ lấy nó. Cảm ơn. –

Trả lời

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

này có các std::initializer_list bằng cách tham chiếu không const, nhưng sau đó bạn cố gắng để ràng buộc một tạm thời với nó, đó là bất hợp pháp

std::initializer_list được thiết kế để nhẹ, vì vậy bạn chỉ có thể vượt qua nó bằng giá trị :

Test(std::initializer_list<T> list) : V(list){} 
//       ^no & 
Các vấn đề liên quan