On Fri, May 23, 2025 at 7:00 PM Jonathan Wakely <jwak...@redhat.com> wrote:
> Since r16-154-gc91eb5a5c13f14 std::addressof is no less efficient than > std::__addressof, so change some uses of the latter to the former. > > We can't change them all, because some uses need to compile as C++98 > which only has std::__addressof. > > libstdc++-v3/ChangeLog: > > * include/bits/stl_construct.h: Replace std::__addressof with > std::addressof. > * include/bits/stl_uninitialized.h: Likewise. > --- > > I'm undecided whether it's better to use the standard std::addressof for > simplicity, or to stick with std::__addressof in files where there's a > mix of C++98 code and >= C++11 code. > After giving this a bit of thought. If I touch this files, then most likely we are implementing the new standard features, and in the patch I will just default to std::addressof, as in any other case. So preferring to use std::addressof when available seems like easier to maintain policy. > > Obviously in files that don't need to compile as C++98 (such as > <optional>) we could just use std::addressof. > > Tested x86_64-linux. > > libstdc++-v3/include/bits/stl_construct.h | 2 +- > libstdc++-v3/include/bits/stl_uninitialized.h | 28 +++++++++---------- > 2 files changed, 15 insertions(+), 15 deletions(-) > > diff --git a/libstdc++-v3/include/bits/stl_construct.h > b/libstdc++-v3/include/bits/stl_construct.h > index 23b8fb754710..a53274e33c0c 100644 > --- a/libstdc++-v3/include/bits/stl_construct.h > +++ b/libstdc++-v3/include/bits/stl_construct.h > @@ -82,7 +82,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > if constexpr (__cplusplus > 201703L && is_array_v<_Tp>) > { > for (auto& __x : *__location) > - std::destroy_at(std::__addressof(__x)); > + std::destroy_at(std::addressof(__x)); > } > else > __location->~_Tp(); > There are calls to __addressof in _Destroy at lines 212, 216, 268, 272 in calls that are >= C++11. If we update them, we should also change all of them in file. > diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h > b/libstdc++-v3/include/bits/stl_uninitialized.h > index b1428db48b00..bde787c2beaa 100644 > --- a/libstdc++-v3/include/bits/stl_uninitialized.h > +++ b/libstdc++-v3/include/bits/stl_uninitialized.h > Looks like all of ones that could be updated in this file, are already. > @@ -839,7 +839,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > { > _UninitDestroyGuard<_ForwardIterator> __guard(__first); > for (; __first != __last; ++__first) > - std::_Construct(std::__addressof(*__first)); > + std::_Construct(std::addressof(*__first)); > __guard.release(); > } > }; > @@ -856,7 +856,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > return; > > typename iterator_traits<_ForwardIterator>::value_type* __val > - = std::__addressof(*__first); > + = std::addressof(*__first); > std::_Construct(__val); > if (++__first != __last) > std::fill(__first, __last, *__val); > @@ -873,7 +873,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > { > _UninitDestroyGuard<_ForwardIterator> __guard(__first); > for (; __n > 0; --__n, (void) ++__first) > - std::_Construct(std::__addressof(*__first)); > + std::_Construct(std::addressof(*__first)); > __guard.release(); > return __first; > } > @@ -890,7 +890,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > if (__n > 0) > { > typename iterator_traits<_ForwardIterator>::value_type* __val > - = std::__addressof(*__first); > + = std::addressof(*__first); > std::_Construct(__val); > ++__first; > __first = std::fill_n(__first, __n - 1, *__val); > @@ -955,7 +955,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > __alloc); > typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; > for (; __first != __last; ++__first) > - __traits::construct(__alloc, std::__addressof(*__first)); > + __traits::construct(__alloc, std::addressof(*__first)); > __guard.release(); > } > > @@ -980,7 +980,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > __alloc); > typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; > for (; __n > 0; --__n, (void) ++__first) > - __traits::construct(__alloc, std::__addressof(*__first)); > + __traits::construct(__alloc, std::addressof(*__first)); > __guard.release(); > return __first; > } > @@ -1007,7 +1007,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > { > _UninitDestroyGuard<_ForwardIterator> __guard(__first); > for (; __first != __last; ++__first) > - std::_Construct_novalue(std::__addressof(*__first)); > + std::_Construct_novalue(std::addressof(*__first)); > __guard.release(); > } > }; > @@ -1033,7 +1033,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > { > _UninitDestroyGuard<_ForwardIterator> __guard(__first); > for (; __n > 0; --__n, (void) ++__first) > - std::_Construct_novalue(std::__addressof(*__first)); > + std::_Construct_novalue(std::addressof(*__first)); > __guard.release(); > return __first; > } > @@ -1089,7 +1089,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > { > _UninitDestroyGuard<_ForwardIterator> __guard(__result); > for (; __n > 0; --__n, (void) ++__first, ++__result) > - std::_Construct(std::__addressof(*__result), *__first); > + std::_Construct(std::addressof(*__result), *__first); > __guard.release(); > return __result; > } > @@ -1112,7 +1112,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > { > _UninitDestroyGuard<_ForwardIterator> __guard(__result); > for (; __n > 0; --__n, (void) ++__first, ++__result) > - std::_Construct(std::__addressof(*__result), *__first); > + std::_Construct(std::addressof(*__result), *__first); > __guard.release(); > return {__first, __result}; > } > @@ -1276,11 +1276,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > > noexcept(noexcept(std::allocator_traits<_Allocator>::construct(__alloc, > __dest, std::move(*__orig))) > && noexcept(std::allocator_traits<_Allocator>::destroy( > - __alloc, std::__addressof(*__orig)))) > + __alloc, std::addressof(*__orig)))) > { > typedef std::allocator_traits<_Allocator> __traits; > __traits::construct(__alloc, __dest, std::move(*__orig)); > - __traits::destroy(__alloc, std::__addressof(*__orig)); > + __traits::destroy(__alloc, std::addressof(*__orig)); > } > > // This class may be specialized for specific types. > @@ -1308,8 +1308,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > "relocation is only possible for values of the same type"); > _ForwardIterator __cur = __result; > for (; __first != __last; ++__first, (void)++__cur) > - std::__relocate_object_a(std::__addressof(*__cur), > - std::__addressof(*__first), __alloc); > + std::__relocate_object_a(std::addressof(*__cur), > + std::addressof(*__first), __alloc); > return __cur; > } > > -- > 2.49.0 > >