This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C/C++ PATCH to add __typeof_noqual (PR c/65455, c/39985)


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]