From: Jason Merrill Date: Thu, 5 Mar 2020 15:22:25 +0000 (-0500) Subject: c++: Fix SFINAE for invalid non-type tparm types. X-Git-Tag: releases/gcc-9.3.0~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c47f6f69745cd41cb7cb00407bf1ff81b2a56124;p=thirdparty%2Fgcc.git 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. --- 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