Моя среда Visual Stuido 2013, VC12, Boost 1.59. Следующий код (минимальный репро реального кода):Boost Optional with Boost Thread компиляция проблема
#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>------ Build started: Project: TestBoostOptional, Configuration: Debug x64 ------ 1> main.cpp 1>c:\workspace\third_party\boost_1_59_0\boost/optional/optional.hpp(297): error C2664: 'void boost::optional_detail::optional_base::construct(MyClass &&)' : cannot convert argument 1 from 'boost::detail::thread_move_t' to 'const MyClass &' 1> with 1> [ 1> T=MyClass 1> ] 1> Reason: cannot convert from 'boost::detail::thread_move_t' to 'const MyClass' 1> with 1> [ 1> T=MyClass 1> ] 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 1> c:\workspace\third_party\boost_1_59_0\boost/optional/optional.hpp(292) : while compiling class template member function 'boost::optional_detail::optional_base::optional_base(boost::optional_detail::optional_base &&)' 1> with 1> [ 1> T=MyClass 1> ] 1> c:\workspace\third_party\boost_1_59_0\boost/optional/optional.hpp(873) : see reference to function template instantiation 'boost::optional_detail::optional_base::optional_base(boost::optional_detail::optional_base &&)' being compiled 1> with 1> [ 1> T=MyClass 1> ] 1> c:\workspace\third_party\boost_1_59_0\boost/optional/optional.hpp(766) : see reference to class template instantiation 'boost::optional_detail::optional_base' being compiled 1> with 1> [ 1> T=MyClass 1> ] 1> main.cpp(14) : see reference to class template instantiation 'boost::optional' being compiled
Обратите внимание на #include "boost/thread.hpp"
. При удалении это включает компиляцию кода. Что-нибудь, что можно сделать для обхода?
Впечатляющие ответ. Что-то я не знал. И с полезными документами цитатами и ссылками. Что еще мы можем попросить :) – sehe
Принимая это, еще один вариант: '#define BOOST_THREAD_VERSION 3'. Однако это не объясняет, почему это происходит. –