这段代码
#include <tuple>
struct Foo
{
Foo(const int& value):value_(value){}
//Foo(const Foo&)=delete; // delete copy constructor
int value_;
};
int main()
{
std::tuple<Foo> tup(std::move(Foo(1)));
return 0;
}
工作正常,但如果你删除Foo
复制构造函数,它会失败并出现以下编译错误:使用已删除函数Foo::Foo(const Foo&)
。
但是,既然我明确地告诉对象可以移动,为什么std::tuple
构造函数使用Foo
复制构造函数而不是它的移动构造函数?如何强制std::tuple
构造移动Foo
实例而不是复制它?