https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94628
--- Comment #7 from Nicholas Krause <xerofoify at gmail dot com> --- After adding this it seems to work for me, Patrick: case TYPE_ARGUMENT_PACK: if (value_dependent_expression_p(TREE_TYPE(*tp))) return *tp; if (TEMPLATE_TYPE_PARAMETER_PACK(*tp)) return *tp; return NULL_TREE; and gives me: test.c: In function ‘std::common_type_t<decltype (forward<F>(f)(std::integral_constant<int, i>(), (forward<decltype(args)>)(args)...)), decltype (forward<F>(f)(int_constant<Is>(), (forward<decltype(args)>)(args)...))...> select(int, F&&, Args&& ...)’: test.c:14:12: warning: ‘if constexpr’ only available with ‘-std=c++17’ or ‘-std=gnu++17’ 14 | if constexpr(sizeof...(Is)>0) | ^~~~~~~~~ test.c: In function ‘std::common_type_t<decltype (forward<F>(f)(std::integral_constant<int, i>(), (forward<decltype(select::args)>)(select::args)...)), decltype (forward<F>(f)(int_constant<Is>(), (forward<decltype(select::args)>)(select::args)...))...> select(int, F&&, Args&& ...) [with int I = 1; int ...Is = {}; F = t(int)::<lambda(auto:1)>; Args = {}]’: test.c:17:1: warning: control reaches end of non-void function [-Wreturn-type] 17 | } | ^ with no segfault. I'm not sure if this is the correct part to add this test for TYPE_ARGUMENT_PACK or if we would prefer it to be lower in the stack.