* pt.c (invalid_nontype_parm_type_p): Reject class placeholder in
C++17.
From-SVN: r279870
+2020-01-02 Jason Merrill <jason@redhat.com>
+
+ * pt.c (invalid_nontype_parm_type_p): Reject class placeholder in
+ C++17.
+
2020-01-02 Jakub Jelinek <jakub@redhat.com>
PR c/90677
else if (TYPE_PTRMEM_P (type))
return false;
else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
- return false;
+ {
+ if (CLASS_PLACEHOLDER_TEMPLATE (type) && cxx_dialect < cxx2a)
+ {
+ if (complain & tf_error)
+ error ("non-type template parameters of deduced class type only "
+ "available with %<-std=c++2a%> or %<-std=gnu++2a%>");
+ return true;
+ }
+ return false;
+ }
else if (TREE_CODE (type) == TYPENAME_TYPE)
return false;
else if (TREE_CODE (type) == DECLTYPE_TYPE)
template <int> struct S;
-template <S> struct W {
+template <S> struct W { // { dg-error "class type" "" { target c++17_only } }
template <typename> static int foo();
bool b = foo<int>();
};