On Wed, 28 Jun 2017, Martin Sebor wrote:
that defines "remove qualifiers except"
operations for every combination of qualifiers in that version of the
compiler (because "remove qualifiers except _Atomic" and "remove
qualifiers except address spaces" cannot be composed into "remove
qualifiers except _Atomic and address spaces, and "remove const, volatile,
restrict and address spaces" is not something user code should need to
hardcode when the intent is "remove qualifiers except _Atomic").
I'm not sure I understand what you're trying to say. I thought
we agreed earlier that __typeof_noqual__ would remove all type
qualifiers.
Yes, it should.
What I'm saying is: if you provide an interface that enables users to
write code that means "remove const" and will continue to mean exactly
that with future GCC versions, even when those versions have additional
qualifiers, you should also provide an interface that enables users to
write code that means "remove all qualifiers except _Atomic and address
spaces" (and likewise for any other combination) and will continue to mean
exactly that with future GCC versions, even when those versions have
additional qualifiers. Allowing users to write "remove const, volatile
and restrict" is *not* the same, as the meanings would diverge when future
qualifiers are added.