编译错误:boost::p romise<T>::set_value(const T&) 不存在
Compile error: boost::promise<T>::set_value(const T&) doesn't exist
我的Boost有问题。线程的未来:除了基本类型之外,我似乎不能将任何东西放入承诺、未来或打包的任务中。
下面是一个最小的测试用例:
#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之前定义的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));
^
似乎没有接受const左值引用的promise::set_value()的重载。看看future.hpp
中的promise
和future_traits
,似乎只有在BOOST_NO_CXX11_RVALUE_REFERENCES
未定义时才会存在const左值ref重载。然而,这对我来说毫无意义……当没有右值引用时,确实需要const左值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用户的邮件列表来看,这似乎是Boost中的一个错误,并且在1.56中也存在-看起来它在c++ 03模式中从根本上被破坏了。
Bug报告:https://svn.boost.org/trac/boost/ticket/10340
相关文章:
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- 如何修复" State Error (active) E0513 a value of type "const wchar_t *" cannot be assigned to an entity o
- 为什么const rvalue合格的std ::可选:: value()返回const rvalue参考
- "Any value" 对于 'const std::string&' 参数
- 如何修复"initial value of reference to non-const must be an lvalue?"
- const int&value = 12 和 const int value = 12 之间的差异;
- 当整数变量用于在 c++ 中声明数组大小时,错误显示为"Expression must have a const value"
- JsonCpp:未定义的对"Json::Value::operator[](int) const"的引用
- const object&return value from a method, best practice
- is_const<const int&>::value 是假的 - 为什么?
- const T& value() const 是什么意思?
- 如何编写is_reference_const函数,使is_reference_const<const int&>::value'是图尔
- const value and RVO
- 为什么"int *find(const vector<int> &vec, int value)"会给我一个无效的转换错误?
- 当使用std::make_pair时,L-value指定const对象
- L-value在使用std::map时指定const对象
- 为什么 std::is_const<const int&>::value 的计算结果为 false?
- C++标准:类型"int"的矢量构造函数中的默认"const T& value"
- const或ref或const ref或value作为setter函数的参数
- 为什么"cups_option_t::name"和"::value"不是"const char*"?