This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [c++] Another question about demangler output
Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
> Ian Lance Taylor <ian@wasabisystems.com> writes:
>
> [...]
>
> | This gives _ZN2BBcvPFivEEv which (currently) demangles as
> | BB::operator int (*)()()
> |
> | But using a gcc extension, I can do this without a typedef:
> |
> | class BB { operator typeof (int(*)())(); };
> | BB::operator typeof (int(*)())() { return 0; }
>
> If you do that, then you might end up accpeting two different
> declarations as same where the token-oriented scheme (ODR) would have
> kept them separate. That is, you would not be able to differentiate
>
> tu1.C:
>
> struct B { operator typeof(int(*)())(); };
>
> from
>
> tu2.C:
>
> struct B { typedef int (*foo)(); operator foo(); };
>
> ODR says they are different.
I don't think it does. It says you can only have one of them in any
given program, but that's not the same as being different for linkage
purposes.
--
- Geoffrey Keating <geoffk@geoffk.org>