http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59457
Bug ID: 59457 Summary: name mangling in presence of variadic templates seems wrong Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: major Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: plasmahh at gmx dot net With the program below, the output is 1hI1AI2hhIiEEE h<A<hh<int> > > h<A, hh<int> > where the "h<A, hh<int> >" part is from my "hand-mangled" idea how it should look like. It seems to be only present when variadic templates are there, e.g. when you replace class... with class, it goes away. Clang btw. seems to mangle it correctly, that is with J in place of I. #include <iostream> #include <typeinfo> #include <cxxabi.h> struct A{}; template<class,class...> struct h{}; template<class> struct hh{}; int main() { typedef h<A,hh<int>> hx; const char* name = typeid(hx).name(); std::cout << name << "\n"; char db[4096]; size_t size = 4096; int st; abi::__cxa_demangle(name,db,&size,&st); std::cout << db << "\n"; // now what I think the symbol should look like (exchange abi::__cxa_demangle("1hI1AJ2hhIiEEE",db,&size,&st); std::cout << db << "\n"; return 0; }