diff --git a/src/demangle.cc b/src/demangle.cc index d7b3af1..dd26914 100644 --- a/src/demangle.cc +++ b/src/demangle.cc @@ -1097,10 +1097,11 @@ static bool ParseTemplateArgs(State *state) { // ::= // ::= // ::= I * E # argument pack +// ::= J * E # argument pack // ::= X E static bool ParseTemplateArg(State *state) { State copy = *state; - if (ParseOneCharToken(state, 'I') && + if ((ParseOneCharToken(state, 'I') || ParseOneCharToken(state, 'J')) && ZeroOrMore(ParseTemplateArg, state) && ParseOneCharToken(state, 'E')) { return true; diff --git a/src/demangle_unittest.txt b/src/demangle_unittest.txt index 4e23c65..fd6aca0 100644 --- a/src/demangle_unittest.txt +++ b/src/demangle_unittest.txt @@ -135,3 +135,7 @@ _ZlsRSoRKSs operator<<() _ZngILi42EEvN1AIXplT_Li2EEE1TE operator-<>() _ZplR1XS0_ operator+() _Zrm1XS_ operator%() + +# Template argument packs can start with I or J. +_Z3addIIiEEvDpT_ add<>() +_Z3addIJiEEvDpT_ add<>()