https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86932
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Known to work| |7.3.0 Keywords| |accepts-invalid Last reconfirmed| |2018-08-13 CC| |jason at gcc dot gnu.org Ever confirmed|0 |1 Summary|[8 Regression] Empty |[8/9 Regression] Empty |non-type template parameter |non-type template parameter |pack not considered for |pack not considered for |SFINAE. |SFINAE. Known to fail| |8.2.0, 9.0 --- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- You've got a stray 'typename' there. Reduced: template<bool, typename T> struct enable_if { using type = T; }; template<typename T> struct enable_if<false, T> { }; template<typename> struct is_foo { static constexpr bool value = false; }; template<class U, typename enable_if<is_foo<U>::value, int>::type...> void f() {} int main() { f<int>(); } Started to be accepted with r247842 PR c++/79549 - C++17 ICE with non-type auto template parameter pack * pt.c (convert_template_argument): Just return an argument pack. (coerce_template_parameter_pack, template_parm_to_arg) (extract_fnparm_pack, make_argument_pack, tsubst_template_args) (tsubst_decl, tsubst, type_unification_real, unify_pack_expansion): Don't set the type of a NONTYPE_ARGUMENT_PACK. * parser.c (make_char_string_pack, make_string_pack): Likewise.