gcc-4.7-20111022 fails to build on PA-RISC

Daniel Krügler daniel.kruegler@googlemail.com
Sun Oct 30 19:23:00 GMT 2011

2011/10/30 Jonathan Wakely <jwakely.gcc@gmail.com>:
> Unfortunately in the real case the initializer is an opaque macro,
> PTHREAD_MUTEX_INITIALIZER, which could be something unsuitable for
> that syntax, such as an integer constant.
> The only reliable way to use that macro is:
> pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
> which requires copy-init.

Here I'm having a logic problem: Obviously the above syntax
is supposed to be well-formed (Let's ignore for the moment
what the macro does). Given that fact, I would argue that
it should also be well-formed as part of any brace-or-equal-initializer
or a non-static data member. Am I missing something here?

What I'm trying to say here is, that if the volatile-member-
and-copy-initialization-semantics reason would be correct,
no-one could portably use

pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;

in block scope or namespace scope without creating ill-formed
code. There must be something obvious that I'm failing to see...

Assuming this is indeed a compiler defect in regard to
member initializers I would use your suggestion as a
temporary workaround.

- Daniel

More information about the Libstdc++ mailing list