From: Marek Polacek Date: Thu, 2 Jun 2022 19:56:18 +0000 (-0400) Subject: c++: new-expression is potentially constant in C++20 X-Git-Tag: basepoints/gcc-14~6238 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2423f6548405185e256036df3d0ef3c13fd996c5;p=thirdparty%2Fgcc.git c++: new-expression is potentially constant in C++20 ... so adjust p_c_e accordingly. gcc/cp/ChangeLog: * constexpr.cc (potential_constant_expression_1): Treat {,VEC_}NEW_EXPR and {,VEC_}DELETE_EXPRas potentially constant in C++20. --- diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 1346a1d4c10..684238883dc 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -9039,12 +9039,20 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, "before C++17"); return false; - case DYNAMIC_CAST_EXPR: - case PSEUDO_DTOR_EXPR: case NEW_EXPR: case VEC_NEW_EXPR: case DELETE_EXPR: case VEC_DELETE_EXPR: + if (cxx_dialect >= cxx20) + /* In C++20, new-expressions are potentially constant. */ + return true; + else if (flags & tf_error) + error_at (loc, "new-expression is not a constant expression " + "before C++20"); + return false; + + case DYNAMIC_CAST_EXPR: + case PSEUDO_DTOR_EXPR: case THROW_EXPR: case OMP_PARALLEL: case OMP_TASK: