On Thu, Jun 29, 2017 at 10:35:26AM -0600, Martin Sebor wrote: > On 06/29/2017 09:56 AM, Joseph Myers wrote: > > On Wed, 28 Jun 2017, Martin Sebor wrote: > > > > > > The more limited interfaces could, of course, be __typeof_noqual in some > > > > form. > > > > > > Actually, despite what I've been arguing, I agree. I've come > > > to realize that what makes me uneasy about it is its name: it > > > makes it sound like a special purpose flavor of __typeof__, > > > when it really is a general purpose __remove_qualifiers trait. > > > How does renaming it to something like that sound? > > > > __typeof__ makes clear that it returns a type, whether given a type or an > > expression. Can __remove_qualifiers be applied to an expression, and, if > > so, what does it do - return a type, or return the result of converting > > the expression to the corresponding type with whatever qualifiers removed?
Sorry it's taken so long to respond. > The C++ traits primitives > (https://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html) work on types, > not expressions, so I would suggest to have __remove_qualifiers (and > the related __remove_const et al., if they should be added) follow > the same approach. OK, let's say __remove_qualifiers only works for type names. So then to accomodate PR65455 and others we'd suggest const int a = 3; __remove_qualifiers (__typeof__(a)) x; ? If that's the case, then I'll write a patch that does just that. Regarding __remove_qualifiers (types, expr) and__remove_qualifiers_except, I'd rather not pursue as part of this patch. > PS There are at least a couple of traits on the list above that > would be useful in C as well (__is_enum and __is_union, and maybe > also __underlying_type). This could be fun, but what's the use case for C? Generic programming? Not familiar with that; would certainly appreciate some test cases before I dive into that. Marek