Boost可选的Boost线程编译问题
Boost Optional with Boost Thread compilation issue
我的环境是Visual studio 2013, VC12, Boost 1.59。下面的代码(实际代码的最小复制):
#include "boost/thread.hpp"
#include "boost/optional.hpp"
class MyClass
{
public:
template <typename T>
operator const T& () const;
};
boost::optional<MyClass> foo()
{
boost::optional<MyClass> res;
return res;
}
int main(int argc)
{
foo();
}
不编译,错误:
<>之前1>------构建启动:项目:TestBoostOptional,配置:Debug x64 ------1> main.cpp1>c:workspacethird_partyboost_1_59_0boost/optional/optional.hpp(297):错误C2664: 'void boost::optional_detail::optional_base::construct(MyClass &&)':无法将参数1从'boost::detail::thread_move_t'转换为'const MyClass &'1> 与1> [1> T = MyClass1> ]1>原因:无法从'boost::detail::thread_move_t'转换为'const MyClass'1> 与1> [1> T = MyClass1> ]1>没有可执行此转换的用户定义转换操作符,或者无法调用该操作符1> c:workspacethird_partyboost_1_59_0boost/optional/optional.hpp(292):在编译类模板成员函数'boost::optional_detail::optional_base::optional_base(boost::optional_detail::optional_base &&)'时1> 与1> [1> T = MyClass1> ]1> c:workspacethird_partyboost_1_59_0boost/optional/optional.hpp(873):参见参考函数模板实例化'boost::optional_detail::optional_base::optional_base(boost::optional_detail::optional_base &&)'正在编译1> 与1> [1> T = MyClass1> ]1> c:workspacethird_partyboost_1_59_0boost/optional/optional.hpp(766):参考类模板实例化'boost::optional_detail::optional_base'正在编译1> 与1> [1> T = MyClass1> ]1> main.cpp(14):参见正在编译的类模板实例化'boost::optional'的参考之前注意#include "boost/thread.hpp"
。当删除它时,包括代码编译。有什么可以解决的吗?
您必须在使用任何boost头之前定义BOOST_THREAD_USES_MOVE
。
#define BOOST_THREAD_USES_MOVE
更多信息在这里。这个定义模拟了Boost.Move
的移动,这在这里是必要的。
为了实现Movable类,移动参数并返回类型的提升。线程在编译器支持时使用右值引用它。在不支持它的编译器上。线程使用由Boost提供的仿真。控件提供的模拟以前版本的Boost。线程取决于是否是否定义BOOST_THREAD_USES_MOVE。此宏由BOOST_THREAD_VERSION为2时的默认值。从BOOST_THREAD_VERSION 3开始,BOOST_THREAD_USES_MOVE已定义
参见Boost。移动:
提振。线程默认使用内部移动语义实现。从3.0.0版本开始,您可以使用提供的移动仿真Boost.Move。
当BOOST_THREAD_VERSION==2时,定义BOOST_THREAD_USES_MOVE使用Boost。移动界面。当BOOST_THREAD_VERSION==3定义BOOST_THREAD_DONT_USE_MOVE,如果你不想使用Boost。移动接口。
相关文章:
- 编译 Boost 时在 OS X 上的"ld:未知选项:-soname"
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- 在 Centos7 上使用 boost 1.71.0 编译错误
- 包含来自 boost 1.73.0 的read_graphviz_new.cpp无法编译
- 编译用于Sony NMOS实现的C++boost库
- Simple_ls.cpp的C++Boost编译错误-未找到对Boost的引用::文件系统::路径::文件名
- python的Boost编译错误
- 在 Ubuntu 14.04 上使用 boost 编译:未定义对 'boost::thread::get_id() const' 的引用
- 使用boost编译时出错
- 关于使用cmake和boost编译c++代码的错误
- ubuntu服务器14.04上的Boost编译失败
- 使用boost编译错误.图1.56.0和g++ 4.6.4
- OS X 10.8.5下的Boost编译错误
- Boost编译标记gcc错误
- 使用mingw的boost编译错误
- Boost编译标志,它是什么意思
- Boost编译问题
- 用boost编译一些代码.Python在win7-64位
- 不能用boost编译
- 使用boost编译以使用可用的boost版本