July 08, 2013 C++ template mangling DMC vs VS | ||||
---|---|---|---|---|
| ||||
I've tried to compile next code: struct Goo { template<class X> struct Boo { template<class Y> struct Xoo { Y* v; }; X* v; }; void bar2(Boo<void>::Xoo<int> arg1); }; void Goo::bar2(Goo::Boo<void>::Xoo<int> arg1) { } Visual Studio mangle Goo::bar2 as "?bar2@Goo@@QAEXU?$Xoo@H@?$Boo@X@1@@Z" It's expected: ?$Xoo@H@ : - ::Xoo<int> ?$Boo@X@ : - ::Boo<void> 1 : - Goo (saved early) DMC mangle Goo::bar2 as "?bar2@Goo@@QAEXU?$Xoo@?$Boo@Goo@X@Goo@H@?$Boo@Goo@X@1@@Z" ?$Xoo@?$Boo@Goo@X@Goo@H@ :- ::Xoo<int> ?$Boo@Goo@X@ :- ::Boo<void> 1 : - Goo (saved early) Ergo: DMC writes all parent names for each part of templated name. Is this behaviour expected and desirable or it is bug? (I'm writing C++ mangler for DMD now and I need to know: should I create special cases for DMC and VS or I can use VS mangling scheme and wait when this issue will be fixed in DMC?) |
July 08, 2013 Re: C++ template mangling DMC vs VS | ||||
---|---|---|---|---|
| ||||
Posted in reply to IgorStepanov | Also: VS mangler substitute repeated templated parts of name, DMC not. EG: void gun(P1::Mem<int>, P2::Mem<int>){} VS: "?gun@@YAXU?$Mem@H@P1@@U1P2@@@Z" Attention: VS has substituted second Mem<int> with "1" DMC: "gun@@YAXU?$Mem@P1@H@P1@@U?$Mem@P2@H@P2@@@" |
Copyright © 1999-2021 by the D Language Foundation