我的环境是 Visual Stuido 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> 主.cpp
1>c:\workspace\third_party\boost_1_59_0\boost/optional/optional.hpp(297): 错误 C2664: 'void boost::optional_detail::optional_base::construct(MyClass &&)' : 不能从'boost 转换参数 1 ::detail::thread_move_t' 到 'const MyClass &'
1> 与
1> [
1> T=我的班级
1>]
1> 原因:无法从 'boost::detail::thread_move_t' 转换为 'const MyClass'
1> 与
1> [
1> T=我的班级
1>]
1> 没有可以执行此转换的用户定义转换运算符,或者无法调用该运算符
1> c:\workspace\third_party\boost_1_59_0\boost/optional/optional.hpp(292) : 在编译类模板成员函数'boost::optional_detail::optional_base::optional_base(boost::optional_detail::optional_base &&)'时
1> 与
1> [
1> T=我的班级
1>]
1> c:\workspace\third_party\boost_1_59_0\boost/optional/optional.hpp(873) : 参见函数模板实例化'boost::optional_detail::optional_base::optional_base(boost::optional_detail::optional_base &&)'正在编译
1> 与
1> [
1> T=我的班级
1>]
1> c:\workspace\third_party\boost_1_59_0\boost/optional/optional.hpp(766) : 请参阅正在编译的类模板实例化 'boost::optional_detail::optional_base' 的参考
1> 与
1> [
1> T=我的班级
1>]
1> main.cpp(14) : 请参阅正在编译的类模板实例化 'boost::optional' 的引用
注意#include "boost/thread.hpp". 删除它时,包括代码编译。有什么可以解决的方法吗?