Boost logo

Boost :

Subject: Re: [boost] [config] clang deleted functions bugged
From: Jonathan Wakely (jwakely.boost_at_[hidden])
Date: 2013-10-27 21:54:29

On 28 October 2013 01:45, Jonathan Wakely wrote:
> On 28 October 2013 00:12, Vicente J. Botet Escriba wrote:
>> Boost.Thread defines a private constructor when
>> BOOST_NO_CXX11_DELETED_FUNCTIONS is defined and in this case there is no
>> compiler error.
> That might be true, but that is not sufficient to conclude that clang
> doesn't support deleted functions!
> The stackoverflow question you linked to is years old and Howard's
> answer is wrong (but Johannes's comments on that answer are correct,
> and agree with what Peter already said.)
> The stack trace shows that std::vector is trying to copy the element,
> not move it.
> My guess would be that boost::thread's move constructor is not
> noexcept, so the libc++ std::vector refuses to use a move when
> inserting, and falls back to a copy instead, which fails. That is the
> correct, standard behaviour for std::vector. If my guess is correct
> you should make the move constructor noexcept.

Yep, here's your bug:

        thread(BOOST_THREAD_RV_REF(thread) x)

That is missing a BOOST_NOEXCEPT exception-specification.

Why not simply do x.thread_info.swap(thread_info) to avoid ref-count
updates in that constructor?

Also, there's a bogus copyright date in boost/thread/detail/thread.hpp:

// (C) Copyright 20011-2012 Vicente J. Botet Escriba

Boost list run by bdawes at, gregod at, cpdaniel at, john at