From c47f6f69745cd41cb7cb00407bf1ff81b2a56124 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 5 Mar 2020 10:22:25 -0500 Subject: [PATCH] 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 PR c++/90338 * pt.c (invalid_nontype_parm_type_p): Check complain for non-literal and mutable errors. --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 15 ++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6c4a7751662a..bf0d9b3f2cbd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2020-03-05 Jason Merrill + + PR c++/90338 + * pt.c (invalid_nontype_parm_type_p): Check complain for non-literal + and mutable errors. + 2020-03-04 Jason Merrill PR c++/91607 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 43d9660ebda7..4787747b6ff2 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -25341,15 +25341,20 @@ invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain) 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 -- 2.47.3