public inbox for libstdc++-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r11-10164] libstdc++: Use std::construct_at in std::common_iterator [PR103992]
@ 2022-07-22 7:07 Jonathan Wakely
0 siblings, 0 replies; only message in thread
From: Jonathan Wakely @ 2022-07-22 7:07 UTC (permalink / raw)
To: gcc-cvs, libstdc++-cvs
https://gcc.gnu.org/g:64beecc2201a1da216a8d3feca85974e08e3c890
commit r11-10164-g64beecc2201a1da216a8d3feca85974e08e3c890
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Wed Jan 12 16:58:18 2022 +0000
libstdc++: Use std::construct_at in std::common_iterator [PR103992]
This should have been done as part of the LWG 3574 changes.
libstdc++-v3/ChangeLog:
PR libstdc++/103992
* include/bits/stl_iterator.h (common_iterator): Use
std::construct_at instead of placement new.
* testsuite/24_iterators/common_iterator/1.cc: Check copy
construction is usable in constant expressions.
(cherry picked from commit d67ba1dce9796bff177e52e2bbb68bfa2c69a884)
Diff:
---
libstdc++-v3/include/bits/stl_iterator.h | 8 ++++----
libstdc++-v3/testsuite/24_iterators/common_iterator/1.cc | 16 ++++++++++++++++
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index 96ca48e8130..522da18ea1f 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -1808,14 +1808,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if constexpr (is_trivially_default_constructible_v<_It>)
_M_it = std::move(__x._M_it);
else
- ::new((void*)std::__addressof(_M_it)) _It(__x._M_it);
+ std::construct_at(std::__addressof(_M_it), __x._M_it);
}
else if (_M_index == 1)
{
if constexpr (is_trivially_default_constructible_v<_Sent>)
_M_sent = std::move(__x._M_sent);
else
- ::new((void*)std::__addressof(_M_sent)) _Sent(__x._M_sent);
+ std::construct_at(std::__addressof(_M_sent), __x._M_sent);
}
}
@@ -1829,14 +1829,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if constexpr (is_trivially_default_constructible_v<_It>)
_M_it = std::move(__x._M_it);
else
- ::new((void*)std::__addressof(_M_it)) _It(__x._M_it);
+ std::construct_at(std::__addressof(_M_it), __x._M_it);
}
else if (_M_index == 1)
{
if constexpr (is_trivially_default_constructible_v<_Sent>)
_M_sent = std::move(__x._M_sent);
else
- ::new((void*)std::__addressof(_M_sent)) _Sent(__x._M_sent);
+ std::construct_at(std::__addressof(_M_sent), __x._M_sent);
}
}
diff --git a/libstdc++-v3/testsuite/24_iterators/common_iterator/1.cc b/libstdc++-v3/testsuite/24_iterators/common_iterator/1.cc
index db38230f323..db371c68f02 100644
--- a/libstdc++-v3/testsuite/24_iterators/common_iterator/1.cc
+++ b/libstdc++-v3/testsuite/24_iterators/common_iterator/1.cc
@@ -157,6 +157,22 @@ test04()
VERIFY( x.i == 2 );
}
+constexpr bool
+test_pr103992()
+{
+ using C1 = std::common_iterator<std::reverse_iterator<int*>,
+ std::unreachable_sentinel_t>;
+ using C2 = std::common_iterator<std::reverse_iterator<const int*>,
+ std::unreachable_sentinel_t>;
+ C1 c1;
+ C2 c2 = c1;
+ C1 c3 = c1;
+
+ return true;
+}
+
+static_assert( test_pr103992() );
+
int
main()
{
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-07-22 7:07 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-22 7:07 [gcc r11-10164] libstdc++: Use std::construct_at in std::common_iterator [PR103992] Jonathan Wakely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).