该结构包含一个
std::promise<std::any>
,因此它不能由复制构造函数构造。但即使我提供了 Move 构造函数和 move 分配器,它仍然无法正确运行。它报告了三个错误:
static assertion failed: result type must be constructible from input type
无法引用 函数 "test::test(const test &other)" (已声明 所在行数:19) -- 它是已删除的函数
use of deleted function 'test::test(const test&)'
重现代码:
#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()
返回了可以移动的引用。