Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译错误:boost::promise<;T>;::设置_值(常数T&;)不';不存在_C++_Boost_Compiler Errors - Fatal编程技术网

C++ 编译错误:boost::promise<;T>;::设置_值(常数T&;)不';不存在

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 //

我在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
    // 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()
                                                     ^