尝试使用初始化列表时,我在Visual Studio C ++ 11中遇到错误,如下面的代码所示
template <typename T>
struct TestArray
{
TestArray(std::initializer_list<T> list) {}
TestArray(TestArray<T> &&rval) {} // This causes an error
};
struct TestPair
{
TestPair(int a, int b) {}
};
当我宣布:
TestArray<TestPair> blah({ { 1, 2 } });
我收到错误:
Cannot convert from 'initializer-list' to 'TestArray<TestPair>'
No constructor could take the source type, or constructor overload resolution was ambiguous
如果删除rvalue构造函数,它可以正常工作。为什么初始化列表和rvalue构造函数之间存在某种歧义?
答案 0 :(得分:0)
你测试错了,你不应该有外()
,更像是:
TestArray<TestPair> blah{{1, 2}};