digitalmars.D.bugs - [Issue 15970] New: C++ mangling of templated arg type
- via Digitalmars-d-bugs (37/39) Apr 29 2016 https://issues.dlang.org/show_bug.cgi?id=15970
https://issues.dlang.org/show_bug.cgi?id=15970 Issue ID: 15970 Summary: C++ mangling of templated arg type Product: D Version: D2 Hardware: x86 OS: Mac OS X Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: jbc.engelen gmail.com C++ mangling is wrong when a function takes an argument of type T (templated) and when the typeof(T) is a class. Test case: ``` extern(C++) class Symbol {} extern(C++) class Symbol2 {} extern(C++) class A(T) { void foo_template(T t) {} void foo_incorrect(Symbol t) {} void foo_correct(Symbol2 t) {} } A!int b_works; A!Symbol b_incorrect; ``` Then runningdmd -c cpp.d -ofcpp.o nm cpp.o | c++filtgives the correct mangling for A!int: A<int>::foo_correct(Symbol2*) A<int>::foo_template(int) A<int>::foo_incorrect(Symbol*) but incorrect mangling for A!Symbol: A<Symbol*>::foo_correct(Symbol2*) A<Symbol*>::foo_template(A<Symbol*>) <--- argument type wrong A<Symbol*>::foo_incorrect(A<Symbol*>) <--- argument type wrong --
Apr 29 2016