[cxx-abi-dev] Seeking clarification about mangling nested template specializations

John McCall rjmccall at apple.com
Sat May 2 07:52:48 UTC 2015


> On Apr 27, 2015, at 4:57 AM, Mike Herrick <mjh at edg.com> wrote:
>> On Apr 26, 2015, at 4:07 AM, John McCall <rjmccall at apple.com> wrote:
>> 
>> Here’s a concrete example using a member class template:
>> 
>> struct A {
>> template <unsigned I> class B {};
>> };
>> template <class T> void bar(T t, A::B<0> x = {}, A::B<1> y = {}) {}
>> int main() { bar(0); }
>> 
>> A compiler which always mangles member templates as nested-names
>> will mangle this as:
>> _Z3barIiEvT_N1A1BILj0EEENS2_ILj1EEE
>> 
>> A compiler which uses the unscoped mangling when a substitution
>> already exists will mangle this as:
>> _Z3barIiEvT_N1A1BILj0EEES2_ILj1EE
>> 
>> Unless somebody finds a compiler that actually does the latter, I think
>> this is just a specification bug and we’ve always meant the former.
>> I’m in the middle of rewriting the prose in this section anyway; if nobody
>> objects in the next week or so, I’ll just fix this while I’m there.
> 
> EDG gets the same mangling for this example; thanks for fixing the wording.

Okay, we seem to have consensus on this, thanks.  I’ve committed the
rewrite, together with a resolution to an ambiguity in <prefix> that Richard
suggested quite some time ago.

John.


More information about the cxx-abi-dev mailing list