diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-11-15 19:58:27 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-11-15 19:58:27 +0000 |
commit | a31517cb9ababe3195888eb91e7c1aa821540fc4 (patch) | |
tree | 6f62001b4e6af88518d48534874d32f3f6f97b3d /libstdc++-v3/include/std/concepts | |
parent | 01eb211bade92275e39254cc5a0dc21834dbcac4 (diff) | |
download | gcc-a31517cb9ababe3195888eb91e7c1aa821540fc4.zip gcc-a31517cb9ababe3195888eb91e7c1aa821540fc4.tar.gz gcc-a31517cb9ababe3195888eb91e7c1aa821540fc4.tar.bz2 |
libstdc++: Implement LWG 3149 for std::default_constructible
The change approved in Belfast did not actually rename the concept from
std::default_constructible to std::default_initializable, even though
that was intended. That is expected to be done soon as a separate issue,
so I'm implementing that now too.
* include/bits/iterator_concepts.h (weakly_incrementable): Adjust.
* include/std/concepts (default_constructible): Rename to
default_initializable and require default-list-initialization and
default-initialization to be valid (LWG 3149).
(semiregular): Adjust to new name.
* testsuite/std/concepts/concepts.lang/concept.defaultconstructible/
1.cc: Rename directory to concept.defaultinitializable and adjust to
new name.
* testsuite/std/concepts/concepts.lang/concept.defaultinitializable/
lwg3149.cc: New test.
* testsuite/util/testsuite_iterators.h (test_range): Adjust.
From-SVN: r278314
Diffstat (limited to 'libstdc++-v3/include/std/concepts')
-rw-r--r-- | libstdc++-v3/include/std/concepts | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/libstdc++-v3/include/std/concepts b/libstdc++-v3/include/std/concepts index e6d405a..98b3894 100644 --- a/libstdc++-v3/include/std/concepts +++ b/libstdc++-v3/include/std/concepts @@ -138,9 +138,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION concept constructible_from = destructible<_Tp> && is_constructible_v<_Tp, _Args...>; - /// [concept.defaultconstructible], concept default_constructible + /// [concept.defaultinitializable], concept default_initializable template<typename _Tp> - concept default_constructible = constructible_from<_Tp>; + concept default_initializable = constructible_from<_Tp> + && requires + { + _Tp{}; + (void) ::new _Tp; + }; /// [concept.moveconstructible], concept move_constructible template<typename _Tp> @@ -249,7 +254,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION && assignable_from<_Tp&, const _Tp&>; template<typename _Tp> - concept semiregular = copyable<_Tp> && default_constructible<_Tp>; + concept semiregular = copyable<_Tp> && default_initializable<_Tp>; // [concepts.compare], comparison concepts |