https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98579
Bug ID: 98579 Summary: ICE: in output_constructor_regular_field, at varasm.c:5491 Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: sguelton at redhat dot com Target Milestone: --- The following code ``` #include <tuple> struct ComplexPart; template <typename PA, typename PB> struct FollowParser { constexpr FollowParser(PA pa, PB pb) : pa_{pa}, pb_{pb} {} const PA pa_; const PB pb_; }; template <typename PA, typename PB> inline constexpr FollowParser<PA, PB> operator/(PA pa, PB pb) { return FollowParser<PA, PB>{pa, pb}; } template <typename... PARSER> struct ApplyConstructor { constexpr ApplyConstructor(PARSER... p) : parsers_{p...} {} const std::tuple<PARSER...> parsers_; }; template <typename... PARSER> constexpr ApplyConstructor<PARSER...> construct(PARSER... p) { return ApplyConstructor<PARSER...>{p...}; } template <typename A> struct Parser { constexpr Parser() {} }; auto tmp = construct(Parser<ComplexPart>{} / ",", Parser<ComplexPart>{}); ``` compiled with ``` g++ -std=c++17 -c F.cpp ``` raises an ICE. Reproducer on godbolt, using trunk gcc: https://gcc.godbolt.org/z/M3r15z Possible duplicate: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98463 but the example look different enough.