libstdc++: Add missing constexpr to std::optional (P2231R1)
authorJonathan Wakely <jwakely@redhat.com>
Wed, 13 Oct 2021 21:32:28 +0000 (22:32 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Thu, 14 Oct 2021 08:08:01 +0000 (09:08 +0100)
commit476f305b6cf11deec79a55cd5d30e1c13fad5bc0
treeafad676765eb43f4a2287ac67c402579ec6d336a
parentee9fa8a57920e6ceb49bbf0929604a34ee5cabb4
libstdc++: Add missing constexpr to std::optional (P2231R1)

This implements the changes in P2231R1 which make std::optional fully
constexpr in C++20.

libstdc++-v3/ChangeLog:

* include/bits/stl_construct.h (_Construct): Use
std::construct_at when constant evaluated.
* include/std/optional (_Storage, _Optional_payload, optional):
Add constexpr as specified by P2231R1.
* include/std/version (__cpp_lib_optional): Update value for
C++20.
* testsuite/20_util/optional/requirements.cc: Check feature test
macro.
* testsuite/20_util/optional/constexpr/assign.cc: New test.
* testsuite/20_util/optional/constexpr/cons/conv.cc: New test.
* testsuite/20_util/optional/constexpr/modifiers.cc: New test.
* testsuite/20_util/optional/constexpr/swap.cc: New test.
* testsuite/20_util/optional/version.cc: New test.
libstdc++-v3/include/bits/stl_construct.h
libstdc++-v3/include/std/optional
libstdc++-v3/include/std/version
libstdc++-v3/testsuite/20_util/optional/constexpr/assign.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/optional/constexpr/cons/conv.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/optional/constexpr/modifiers.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/optional/constexpr/swap.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/optional/requirements.cc
libstdc++-v3/testsuite/20_util/optional/version.cc [new file with mode: 0644]