[cxx-abi-dev] Mangling for noexcept operator
David Vandevoorde
daveed at edg.com
Tue Sep 4 19:24:03 UTC 2012
On Sep 4, 2012, at 2:46 PM, John McCall wrote:
> On Sep 4, 2012, at 11:30 AM, David Vandevoorde wrote:
>> On Sep 4, 2012, at 2:17 PM, John McCall wrote:
>>> On Sep 4, 2012, at 6:39 AM, Mike Herrick wrote:
>>>> We don't seem to have a mangling for the new noexcept operator.
>>>>
>>>> How's this:
>>>>
>>>> <operator-name> ::= nx # noexcept (an expression)
>>>>
>>>> For example:
>>>>
>>>> void f(int) noexcept;
>>>> void f(float) throw (int);
>>>> template <class T> auto g(T p) -> decltype((int (*)[noexcept(f(p))])0);
>>>> int main() {
>>>> g(1);
>>>> }
>>>>
>>>> Which would provide a mangled name of: _Z1gIiEDTcvPAnxcl1ffp_E_iLi0EET_ for g.
>>>
>>> This seems like a fine mangling, but it shouldn't be an <operator-name>.
>>> Let's just do:
>>> <expression> ::= nx <expression>
>>
>> It would be odd not to follow the pattern of sizeof and alignof here, no?
>
> Heh. I was following the pattern of typeid and throw. :)
Ah yes.
> I didn't actually notice that sizeof and alignof are only <expression>s directly in the type variant.
Oops: So sizeof(type) and alignof(type) are there twice: Once under <operator-name> and once under <expression>. :-(
>
>> (I can kind of see an argument to distinguish the "operators" that cannot be the basis of a <base-unresolved-name>, but I'm not sure it's worth the complication.)
>
> Well, they also can't be the names of declarations, at least until the committee inevitably adds an operator sizeof. :)
>
> I withdraw my tweak, although I may just move these using editorial discretion unless you really object. Neither seems inherently less complicated, and having (e.g.) both sizeof rules in the same place has some merit.
I don't object. It does look like some cleaning up would be nice there.
Daveed
More information about the cxx-abi-dev
mailing list