Subject: [Boost-bugs] [Boost C++ Libraries] #2501: upgrade_to_unique_lock doesn't compile on C++0x mode
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2008-11-14 12:41:05
#2501: upgrade_to_unique_lock doesn't compile on C++0x mode
----------------------------------+-----------------------------------------
Reporter: Rodolfo Lima | Owner: anthonyw
Type: Bugs | Status: new
Milestone: Boost 1.38.0 | Component: thread
Version: Boost Release Branch | Severity: Problem
Keywords: |
----------------------------------+-----------------------------------------
The following code doesn't compile with gcc-4.3.2 (and gcc-4.4.0), and
boost-1.36 (and boost-1.37) when using -std=c++0x on linux.
#include <boost/thread/shared_mutex.hpp>
int main()
{
boost::shared_mutex mtx;
boost::upgrade_lock<boost::shared_mutex> lk(mtx);
boost::upgrade_to_unique_lock<boost::shared_mutex> lk2(lk);
}
gcc spits:
g++-4.4.0-alpha20081003 -std=c++0x -I src/boost-trunk teste.cpp -o
teste
In file included from src/boost-trunk/boost/thread/pthread/mutex.hpp:11,
from src/boost-trunk/boost/thread/mutex.hpp:16,
from
src/boost-trunk/boost/thread/pthread/shared_mutex.hpp:12,
from src/boost-trunk/boost/thread/shared_mutex.hpp:16,
from teste.cpp:1:
src/boost-trunk/boost/thread/locks.hpp: In destructor
'boost::upgrade_to_unique_lock<Mutex>::~upgrade_to_unique_lock() [with
Mutex = boost::shared_mutex]':
teste.cpp:8: instantiated from here
src/boost-trunk/boost/thread/locks.hpp:807: error: no match for
'operator=' in
'*((boost::upgrade_to_unique_lock<boost::shared_mutex>*)this)->boost::upgrade_to_unique_lock<boost::shared_mutex>::source
= boost::move [with Mutex =
boost::shared_mutex](((boost::unique_lock<boost::shared_mutex>&&)(&((boost::upgrade_to_unique_lock<boost::shared_mutex>*)this)->boost::upgrade_to_unique_lock<boost::shared_mutex>::exclusive)))'
src/boost-trunk/boost/thread/locks.hpp:643: note: candidates are:
boost::upgrade_lock<Mutex> &
boost::upgrade_lock<Mutex>::operator=(boost::upgrade_lock<Mutex> &) [with
Mutex = boost::shared_mutex]
src/boost-trunk/boost/thread/locks.hpp:694: note:
boost::upgrade_lock<Mutex> &
boost::upgrade_lock<Mutex>::operator=(boost::detail::thread_move_t<boost::upgrade_lock<Mutex>
>) [with Mutex = boost::shared_mutex]
src/boost-trunk/boost/thread/locks.hpp:701: note:
boost::upgrade_lock<Mutex>&
boost::upgrade_lock<Mutex>::operator=(boost::detail::thread_move_t<boost::unique_lock<Mutex>
>) [with Mutex = boost::shared_mutex]
src/boost-trunk/boost/thread/locks.hpp: In constructor
'boost::unique_lock<Mutex>::unique_lock(boost::upgrade_lock<Mutex>&&)
[with Mutex = boost::shared_mutex]':
src/boost-trunk/boost/thread/locks.hpp:801: instantiated from
'boost::upgrade_to_unique_lock<Mutex>::upgrade_to_unique_lock(boost::upgrade_lock<Mutex>&)
[with Mutex = boost::shared_mutex]'
teste.cpp:8: instantiated from here
src/boost-trunk/boost/thread/locks.hpp:775: error: request for member
'unlock_upgrade_and_lock' in
'((boost::unique_lock<boost::shared_mutex>*)this)->boost::unique_lock<boost::shared_mutex>::m',
which is of non-class type 'boost::shared_mutex*'
It compiles fine in non std++0x mode.
Regards,
Rodolfo Lima
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/2501> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:49:59 UTC