On 11/16/22 01:19, Jakub Jelinek wrote:
On Wed, Nov 16, 2022 at 12:27:02AM +0000, Jonathan Wakely wrote:
On Tue, 15 Nov 2022 at 23:50, Jakub Jelinek <ja...@redhat.com> wrote:

On Tue, Nov 15, 2022 at 06:36:38PM -0500, Jason Merrill wrote:
Here is an updated patch that passed bootstrap/regtest, the only
change is another testcase tweak.

2022-11-13  Jakub Jelinek  <ja...@redhat.com>

gcc/c-family/
     * c-cppbuiltin.cc (c_cpp_builtins): Bump __cpp_constexpr
     value from 202207L to 202211L.
gcc/cp/
     * constexpr.cc (cxx_eval_constant_expression): Implement C++23
     P2647R1 - Permitting static constexpr variables in constexpr functions.
     Allow decl_maybe_constant_var_p static or thread_local vars for
     C++23.

This was accepted as a DR, so it shouldn't be limited to C++23 mode.
Certainly it should be allowed in C++20 mode; I don't have a strong opinion
about C++14/17.  Jonathan, do you?

How will a feature with feature test macro with multiple values work as DR?
Or will everything but the macro be treated as a DR (so __cpp_constexpr >=
202211L only for C++23)?

Yes, I think so. We just won't be able to advertise this feature as
supported in C++20.

Ok.  But there is another issue, the
https://eel.is/c++draft/expr.const#5.2
spot that P2647R1 is changing didn't exist in C++20, it was only added with
P2242R3.  So, if one would treat P2647R1 as a DR for C++20, one has to come up 
with
a different standard modification.
Probably change the last bullet of:
[dcl.constexpr]/3
its function-body shall not enclose

     a goto statement,
     an identifier label,
     a definition of a variable of non-literal type or of static or thread 
storage duration.
to
     a definition of a variable of non-literal type or of a non-constexpr
       variable of static or thread storage duration.
or so.

Indeed, though the hypothetical C++20 change could still use the "usable in constant expressions" phrase.

Jason

Reply via email to