[cfe-dev] Breaking change for libc++ incoming (Minor, C++17 only)

Marshall Clow via cfe-dev cfe-dev at lists.llvm.org
Thu Jul 27 10:04:31 PDT 2017


In C++17, we introduced a new variadic class called scoped_lock.
It took a set of mutexes, and locked them all (in the constructor) and
unlocked them all (in the destructor).  It also has an option to "adopt"
the locks (i.e, you can pass it already locked mutexes and it will not lock
them again).

The constructors look like this (as originally defined):

class scoped_lock {
...
    explicit scoped_lock(MutexTypes&... m);
    scoped_lock(MutexTypes&... m, adopt_lock_t);
...
};

but this caused some problems with template deduction (specifically in
deduction guides)
So, at the last minute in the C++17 cycle, the committee decided to change
the second constructor to take the `adopt_lock` flag AT THE START.

class scoped_lock {
...
    explicit scoped_lock(MutexTypes&... m);
    scoped_lock(adopt_lock_t, MutexTypes&... m);
...
};

scoped_lock is a new feature in C++17, and so the installed base of people
using it should be very small. There are no uses of it in the LLVM code
base outside of the libc++ test suite.

I'm going to make this change to bring libc++ in conformance with the
(hopefully final) standard, and people who are using the old call will have
to update their code. Sorry about that.

-- Marshall

P.S. Only people who are using the second constructor (the one with
adopt_lock) will be affected by this change.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170727/4ef6e8fe/attachment.html>


More information about the cfe-dev mailing list