https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102338
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- here is a more reduced testcase: struct S { template<typename T> int f(T && t) noexcept { return 0; } template<typename T, typename... Ts> int f(T && t, Ts && ... ts) noexcept(noexcept(f(ts...))) { return f(ts...); } }; bool t = S{}.f(true, 0, 5u); If this was not a struct, the code would be invalid as the recusive f is not found.