aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/std/concepts
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2019-11-15 19:58:27 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2019-11-15 19:58:27 +0000
commita31517cb9ababe3195888eb91e7c1aa821540fc4 (patch)
tree6f62001b4e6af88518d48534874d32f3f6f97b3d /libstdc++-v3/include/std/concepts
parent01eb211bade92275e39254cc5a0dc21834dbcac4 (diff)
downloadgcc-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/concepts11
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