E.g. # define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ { .__data = { .__kind = PTHREAD_MUTEX_RECURSIVE_NP } } This definition isn't valid C++, nor can it be parsed by any version of GNU C++ even as an extension. This is a functionality regression from linuxthreads, which did not use designated initializers.
I've some good suggestions what to do with those C++ "designers". I changed the header, reluctantly.