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;
    }

Reply via email to