该结构体包含一个
std::promise<std::any>
,因此它不能由复制构造函数构造。但是即使我提供了移动构造函数和移动分配器,它也无法正确运行。并且它报告了三个错误:
重现代码:
#include <future>
#include <any>
#include <queue>
struct test{
std::promise<std::any> p;
test()=default;
test(test&& other){
p = std::move(other.p);
}
test& operator=(test&& other){
p = std::move(other.p);
return *this;
}
test& operator=(const test& other)=delete;
test(const test& other)=delete;
};
test getFirst(std::queue<test> tests){
test test = tests.front();
tests.pop();
return test;
}
int main(){
test t;
std::queue<test> tests;
test t2 = getFirst(tests);
return 0;
}
test getFirst(std::queue<test> &tests) { // (1)
test test = std::move(tests.front()); // (2)
tests.pop();
return test;
}
您的代码中有两个问题。
std::queue<test> tests
。tests.front()
返回了可以移动的引用。