繁体   English   中英

编译错误:boost :: promise <T> :: set_value(const T&)不存在

[英]Compile error: boost::promise<T>::set_value(const T&) doesn't exist

我遇到了Boost.Thread的未来问题:我似乎无法将任何原始类型放入承诺,未来或打包任务中。

这是一个最小的测试用例:

#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) );
}

在包含Boost.Future标头之前定义了BOOST_THREAD_USES_MOVE我得到以下错误:gcc 4.8.2和Boost 1.55( 这里是完整输出):

../../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));
     ^

似乎没有promise :: set_value()的重载采用const左值引用。 纵观promisefuture_traitsfuture.hpp看来,当const的左值裁判超载将只存在BOOST_NO_CXX11_RVALUE_REFERENCES是不确定的。 然而,对我来说没有任何意义......当没有右值引用时,确实需要const lvalue ref重载吗? (注意,即使我将一个可变的左值ref传递给make_ready_future() )也会发生这种情况。

如果我没有定义BOOST_THREAD_USES_MOVE则编译失败并出现以下错误( 此处为完整输出):

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

我错过了什么吗?

似乎来自boost-users邮件列表,这是Boost中的一个错误,并且也出现在1.56中 - 看起来它在C ++ 03模式中从根本上被破坏了。

错误报告: https//svn.boost.org/trac/boost/ticket/10340

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM