初始化列表构造函数导致与rvalue构造函数的歧义

时间:2015-11-02 05:28:09

标签: c++ c++11

尝试使用初始化列表时,我在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构造函数之间存在某种歧义?

1 个答案:

答案 0 :(得分:0)

你测试错了,你不应该有外(),更像是:

TestArray<TestPair> blah{{1, 2}};