我正在使用Boost.Thread编写应用程序。不幸的是,在将新版本移到“生产”环境后,我无法编译该项目。 g++
说:
/usr/include/boost/thread/locks.hpp: In constructor
‘boost::upgrade_to_unique_lock<Mutex>::upgrade_to_unique_lock
(boost::upgrade_lock<Mutex>&) [with Mutex = boost::shared_mutex]’:
worker.cpp:34:69: instantiated from here
/usr/include/boost/thread/locks.hpp:926:48: error: call of overloaded ‘move(
boost::upgrade_lock<boost::shared_mutex>&)’ is ambiguous
/usr/include/boost/thread/locks.hpp:926:48: note: candidates are:
/usr/include/boost/move/move.hpp:294:86: note: typename boost::move_detail
::disable_if<boost::has_move_emulation_enabled<T>, T&>::type boost::move(T&)
[with T = boost::upgrade_lock<boost::shared_mutex>, typename boost::move_detail
::disable_if<boost::has_move_emulation_enabled<T>, T&>::type = boost
::upgrade_lock<boost::shared_mutex>&]
/usr/include/boost/thread/detail/move.hpp:44:110: note: typename boost
::enable_if<boost::is_convertible<T&, boost::detail::thread_move_t<T> >,
boost::detail::thread_move_t<T> >::type boost::move(T&) [with T = boost
::upgrade_lock<boost::shared_mutex>, typename boost::enable_if<boost
::is_convertible<T&, boost::detail::thread_move_t<T> >, boost::detail
::thread_move_t<T> >::type = boost::detail::thread_move_t<boost
::upgrade_lock<boost::shared_mutex> >]
/usr/include/boost/thread/locks.hpp: In destructor ‘boost::upgrade_to_unique_lock
<Mutex>::~upgrade_to_unique_lock() [with Mutex = boost::shared_mutex]’:
worker.cpp:34:69: instantiated from here
/usr/include/boost/thread/locks.hpp:932:17: error: call of overloaded ‘move(boost
::unique_lock<boost::shared_mutex>&)’ is ambiguous
...
依此类推。
我检查了dev和生产环境有相同的libboost版本(1.48)。
有谁知道可能是什么原因?我应该检查/升级哪些其他库/工具版本?
答案 0 :(得分:1)
根据their bug tracker,这是Boost 1.48中的已知错误,似乎已在1.49中修复。如果模仿C ++ 11移动语义的Boost.Move与Boost.Thread一起使用,它有自己的移动语义模拟器,那就不明确了。
考虑到Boost 1.48是在2。5年前发布的(November 2011),您应该考虑升级到最新版本,目前是Boost 1.55。