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. -- Joseph S. Myers jos...@codesourcery.com