我的环境是 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"
. 删除它时,包括代码编译。有什么可以解决的方法吗?