从临时创建一对

use*_*279 2 c++ move c++11

我试着从临时搭建中建造一对.据我所知,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);
}
Run Code Online (Sandbox Code Playgroud)

我试着编译它clang++-3.8 --std=c++14.Test的复制构造函数由pair调用.因为它已删除,我收到错误call to deleted constructor of 'Test'.但是编译器似乎没有问题,因为我在gcc中遇到了类似的错误,请参阅https://ideone.com/n5GOeR.

有人可以向我解释为什么上面的代码无法编译?

Sam*_*hik 5

我的gcc(6.1.1)给出了一个略有不同的错误消息,这更有帮助:

t.C:8:3: note: declared private here
   Test(Test&&) = default;
   ^~~~
Run Code Online (Sandbox Code Playgroud)

你的移动构造函数是私有的.它显然必须是公开的.