C++ 编译错误:boost::promise<;T>;::设置_值(常数T&;)不';不存在
我在Boost.Thread的未来方面遇到了问题:我似乎只能在promise、future或打包任务中添加一个基本类型 下面是一个最小的测试用例:C++ 编译错误:boost::promise<;T>;::设置_值(常数T&;)不';不存在,c++,boost,compiler-errors,C++,Boost,Compiler Errors,我在Boost.Thread的未来方面遇到了问题:我似乎只能在promise、future或打包任务中添加一个基本类型 下面是一个最小的测试用例: #include <boost/thread/future.hpp> struct foo { foo(int i_): i(i_) {} int i; }; int main() { // A const future isn't much use, but I needed to prove //
#include <boost/thread/future.hpp>
struct foo
{
foo(int i_): i(i_) {}
int i;
};
int main()
{
// A const future isn't much use, but I needed to prove
// the problem wasn't me trying to copy a unique_future
const boost::unique_future<foo>& fut = boost::make_ready_future( foo(42) );
}
似乎不存在接受常量左值引用的promise::set_value()重载。查看future.hpp
中的promise
和future\u traits
,似乎const-lvalue-ref重载只有在BOOST\u NO\u CXX11\u RVALUE\u REFERENCES
未定义时才会存在。然而,这对我来说毫无意义……当没有右值引用时,确实需要const-lvalue-ref重载吗?(注意,即使我将一个可变的左值ref传递给make\u ready\u future()
,也会发生这种情况)
如果我没有定义BOOST\u THREAD\u使用\u MOVE
则编译失败,并出现以下错误(完整输出):
。/../deps/boost/include/boost/thread/detail/move.hpp:183:54:错误:调用boost::unique_future::unique_future::unique_future(boost::unique_future)时没有匹配函数
#定义BOOST\u THREAD\u MAKE\u RV\u REF(右值)右值.move()
^
我错过了什么吗?从boost用户邮件列表中可以看出,这是boost中的一个bug,在1.56中也存在——看起来它在C++03模式下基本上被破坏了
错误报告:Keep#define BOOST(线程)使用(移动)。并将其编译为:g++boosttest.cpp-I boost_1_55/include-std=c++11-L./boost_1_55/lib/-lboost_thread-lboost_system-lpthreadhuh,刚刚意识到boost_thread_使用移动并不重要,如果我们使用-std=c++11谢谢你的建议,但不幸的是我不能使用c++11:-(当没有右值引用时,确实需要const-lvalue-ref重载吗?它总是需要的,它是
std::promise
的标准化API的一部分,并且您不想只想让承诺准备好右值。
../../deps/boost/include/boost/thread/future.hpp:3634:5: error: no matching function for call to ‘boost::promise<foo>::set_value(const foo&)’
p.set_value(boost::forward<future_value_type>(value));
^
../../deps/boost/include/boost/thread/detail/move.hpp:183:54: error: no matching function for call to boost::unique_future<foo>::unique_future(boost::unique_future<foo>)’
#define BOOST_THREAD_MAKE_RV_REF(RVALUE) RVALUE.move()
^