https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100041
--- Comment #14 from Martin Liška <marxin at gcc dot gnu.org> --- Reduced test-case: $ cat itanium.ii template <typename _Tp> _Tp forward(); void snprintf(...); struct StringView { StringView(char *); }; struct Trans_NS_itanium_demangle_Node { enum Kind {}; Trans_NS_itanium_demangle_Node(Kind); }; struct FloatLiteralImpl : Trans_NS_itanium_demangle_Node { StringView Contents; Kind KindForClass; FloatLiteralImpl(StringView Contents_) : Trans_NS_itanium_demangle_Node(KindForClass), Contents(Contents_) { union { long double value; }; snprintf(value); } }; template <typename> struct ManglingParser; class CanonicalizerAllocator; template <typename, typename Alloc> struct AbstractManglingParser { char First; Alloc ASTAllocator; ManglingParser<CanonicalizerAllocator> getDerived(); template <class... Args> void make(Args...) { ASTAllocator.template makeNode<int>(forward<Args>()...); } template <class> Trans_NS_itanium_demangle_Node *parseFloatingLiteral(); Trans_NS_itanium_demangle_Node *parse(); }; template <typename Alloc, typename Derived> template <class> Trans_NS_itanium_demangle_Node * AbstractManglingParser<Alloc, Derived>::parseFloatingLiteral() { StringView Data(&First); make(Data); return 0; } template <typename Derived, typename Alloc> Trans_NS_itanium_demangle_Node * AbstractManglingParser<Derived, Alloc>::parse() { getDerived().template parseFloatingLiteral<double>(); return 0; } template <typename Alloc> struct ManglingParser : AbstractManglingParser<int, Alloc> {}; struct CanonicalizerAllocator { template <typename Args> void makeNodeSimple(Args); struct MakeNodeImpl { CanonicalizerAllocator &Self; template <typename... Args> void make(Args...) { Self.makeNodeSimple<FloatLiteralImpl>(forward<Args>()...); } }; template <typename, typename... Args> void makeNode(Args...) { MakeNodeImpl{*this}.make(forward<Args>()...); } }; using CanonicalizingDemangler = ManglingParser<int>; CanonicalizingDemangler parseMaybeMangledName_Demangler; void parseMaybeMangledName() { parseMaybeMangledName_Demangler.parse(); }