[c++] Another question about demangler output
Gabriel Dos Reis
gdr@integrable-solutions.net
Sun Dec 7 04:31:00 GMT 2003
Ian Lance Taylor <ian@wasabisystems.com> writes:
| 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 know who the ``you'' is in ``if you do that.'' Or else I
| don't know what the ``that'' is.
|
| I gave two code samples, and g++ uses the same name mangling for both.
| Try it. Is that a bug in g++?
|
| Frankly, I don't see how g++ could do anything else.
The point is this. "typeof" is a GNU/C++ extension. Its use in a
function declaration should be mangled differently from any standard
C++ construction. After all, the ABI has provided hook for vendor
extension.
-- Gaby
More information about the Gcc
mailing list