Re: [cxx-abi-dev] Mangling sizeof
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [cxx-abi-dev] Mangling sizeof
- To: Doug Gregor <doug.gregor@xxxxxxxxx>
- Subject: Re: [cxx-abi-dev] Mangling sizeof
- From: Jason Merrill <jason@xxxxxxxxxx>
- Date: Wed, 11 Mar 2009 13:45:11 -0400
Doug Gregor wrote:
On Wed, Mar 11, 2009 at 9:25 AM, Jason Merrill <jason@xxxxxxxxxx> wrote:
So [different casts] really should all be mangled differently, though
C-style and functional casts can stay the same. But that's a binary
incompatibility that should probably wait until we're ready to deploy a
bunch of binary-incompatible changes.
Do casts within mangled sizeof()s actually work well in any compiler?
If not, then we might have more wiggle-room to fix this sooner rather
than later.
Casts can appear outside of sizeof(), and I don't feel comfortable
guessing that nobody is using *_cast that way. Though as I think I
already mentioned, there's some incompatibility between compilers with
that already:
template <class T, T t = static_cast<T>(0)>
struct A { };
template <class T>
A<T> f(T t) { return A<T>(); }
int main()
{
f(42);
}
gives
_Z1fIiE1AIT_XLi0EEES1_ with EDG (12/08/2008),
_Z1fIiE1AIT_XcvS1_Li0EEES1_ with G++.
i.e. EDG drops the conversion entirely. Changing the type of 't' to int
and the argument to f to char, I get
_Z1fIcE1AIT_XcviLi0EEES1_ with EDG,
_Z1fIcE1AIT_XcvS1_Li0EEES1_ with G++.
Here EDG represents the conversion, but it's to the wrong type.
Jason