https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103019
Bug ID: 103019 Summary: ICE on invalid code with template non-type arugment Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: ice-on-invalid-code Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- While reducing PR 102990, I accidently reduced such that I got invalid code with an ICE without an error message. Reduced testcase all the way: struct range_t { double init; }; template<range_t setup> struct knob_t { int value = setup.init; }; struct Helpers { knob_t<range_t{100}> inputs; }; template <class T, int N> auto detect_fields_count_dispatch() noexcept -> decltype(sizeof(T{})); int t = detect_fields_count_dispatch<Helpers>(); --- CUT ---- If you fix the code such that detect_fields_count_dispatch has the correct template arguments (either removing N from the definition or adding ", 1" to the usage), the ICE goes away. Also note if you change the type of value to be a similar type (that is both are integer types or both real types), the ICE goes away.