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.

Reply via email to