Le 22 juin 2016 à 21:41, Rich Felker <dalias@libc.org> a écrit :

On Wed, Jun 22, 2016 at 09:38:17PM +0200, Julien Ramseier wrote:
Hi Zhao,

Not sure how you did build llvm-libcxx, but the only issue I encountered myself is
the use of PTHREAD_MUTEX_INITIALIZER in libcxx include/__mutex_base.
musl uses volatile types in its pthread_mutex_t struct and C++11 does not allow them
with constexpr member initializers. This rule has been relaxed in C++14.

Note that the code using them is still formally/conceptually buggy.
POSIX does not permit using these initializers as values. They can
only be used as initializers for objects with static storage duration.
A "mutex value" makes no sense; mutexes are objects not values.

Actually the latest POSIX spec allows it.
See http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_init.html

A workaround for the C++11 constexpr issue should land soon in libcxx trunk.
http://reviews.llvm.org/D21637

Julien