c++: Fix SFINAE for invalid non-type tparm types.
Just missing the usual SFINAE pattern here. This was fixed for GCC 10 as a
drive-by in r277902.
gcc/cp/ChangeLog
2020-03-05 Jason Merrill <jason@redhat.com>
PR c++/90338
* pt.c (invalid_nontype_parm_type_p): Check complain for non-literal
and mutable errors.
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6c4a775..bf0d9b3 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2020-03-05 Jason Merrill <jason@redhat.com>
+
+ PR c++/90338
+ * pt.c (invalid_nontype_parm_type_p): Check complain for non-literal
+ and mutable errors.
+
2020-03-04 Jason Merrill <jason@redhat.com>
PR c++/91607
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 43d9660..4787747 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -25341,15 +25341,20 @@
return true;
if (!literal_type_p (type))
{
- error ("%qT is not a valid type for a template non-type parameter "
- "because it is not literal", type);
- explain_non_literal_class (type);
+ if (complain & tf_error)
+ {
+ auto_diagnostic_group d;
+ error ("%qT is not a valid type for a template non-type parameter "
+ "because it is not literal", type);
+ explain_non_literal_class (type);
+ }
return true;
}
if (cp_has_mutable_p (type))
{
- error ("%qT is not a valid type for a template non-type parameter "
- "because it has a mutable member", type);
+ if (complain & tf_error)
+ error ("%qT is not a valid type for a template non-type parameter "
+ "because it has a mutable member", type);
return true;
}
/* FIXME check op<=> and strong structural equality once spaceship is