https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90799
--- Comment #2 from franwade33 at googlemail dot com --- It throws a different compiler error if you give the template parameter (Move `bool is_noexcept` to the start of the template list and call `is_noexcept_function<true>(foo<S>)`). To my knowledge, this is not a gcc extension (And it works fine in MSVC++ and with clang++). <source>: In substitution of 'template<bool is_noexcept, class ... Args> constexpr bool is_noexcept_function(void (*)(Args ...) noexcept (is_noexcept)) [with bool is_noexcept = true; Args = <missing>]': <source>:24:48: required from here <source>:24:48: internal compiler error: in nothrow_spec_p, at cp/except.c:LINE 24 | static_assert(is_noexcept_function<true>(foo<S>)); | ^ https://godbolt.org/z/cjhCQp Where the line number is 1238 in gcc 10.0.0, 1241 in gcc 9.1.0, and 1148 in gcc 8.3.0 (It is an ICE in all 3 versions)