我尝试从临时建造一对。据我所知,std :: pair提供了必要的构造函数,但我无法使它工作。这是我的最小例子:
#include <utility>
struct Test {
Test() : a(1.0) {}
private:
double a;
Test(Test&&) = default;
Test(const Test&) = delete;
Test& operator=(Test&&) = delete;
};
int main (int argc, char** argv) {
std::pair<Test, double> result(Test(), 0.0);
}
我尝试用clang++-3.8 --std=c++14
编译它。
Test的复制构造函数由pair调用。因为它已被删除,我收到错误call to deleted constructor of 'Test'
。但是编译器似乎没有问题,因为我在gcc中遇到了类似的错误,请参阅https://ideone.com/n5GOeR。
有人可以向我解释为什么上面的代码无法编译?
答案 0 :(得分:5)
我的gcc(6.1.1)给出了稍微不同的错误消息,这更有帮助:
t.C:8:3: note: declared private here
Test(Test&&) = default;
^~~~
您的移动构造函数是私有的。它显然必须是公开的。