http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58591
--- Comment #3 from Cary Coutant <ccoutant at gcc dot gnu.org> --- I think the template argument descriptors should be "I1AJiiEE". This produces a demangling that looks right: $ c++filt _Z9ConstructI1AJiiEEvPT_DpOT0_ void Construct<A, int, int>(A*, int&&, int&&) And running this test case through LLVM, that's the mangled name it produces.