提升upgrade_to_unique_lock编译错误

时间:2014-07-02 23:16:31

标签: c++ boost boost-thread

我正在使用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)。

有谁知道可能是什么原因?我应该检查/升级哪些其他库/工具版本?

1 个答案:

答案 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。