12
12
13
13
#include < __assert>
14
14
#include < __config>
15
- #include < __iterator/access.h>
16
15
#include < __memory/addressof.h>
17
16
#include < __new/placement_new_delete.h>
18
17
#include < __type_traits/enable_if.h>
19
18
#include < __type_traits/is_array.h>
20
19
#include < __utility/declval.h>
21
20
#include < __utility/forward.h>
22
- #include < __utility/move.h>
23
21
24
22
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
25
23
# pragma GCC system_header
@@ -65,11 +63,10 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void __destroy_at(_Tp* __loc
65
63
66
64
#if _LIBCPP_STD_VER >= 20
67
65
template <class _Tp , __enable_if_t <is_array<_Tp>::value, int > = 0 >
68
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void __destroy_at (_Tp* __loc) {
66
+ _LIBCPP_HIDE_FROM_ABI constexpr void __destroy_at (_Tp* __loc) {
69
67
_LIBCPP_ASSERT_NON_NULL (__loc != nullptr , " null pointer given to destroy_at" );
70
- auto const __end = std::end (*__loc);
71
- for (auto __it = std::begin (*__loc); __it != __end; ++__it)
72
- std::__destroy_at (__it);
68
+ for (auto && __val : *__loc)
69
+ std::__destroy_at (std::addressof (__val));
73
70
}
74
71
#endif
75
72
@@ -82,7 +79,7 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void destroy_at(_Tp* __loc)
82
79
83
80
# if _LIBCPP_STD_VER >= 20
84
81
template <class _Tp , enable_if_t <is_array_v<_Tp>, int > = 0 >
85
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void destroy_at (_Tp* __loc) {
82
+ _LIBCPP_HIDE_FROM_ABI constexpr void destroy_at (_Tp* __loc) {
86
83
std::__destroy_at (__loc);
87
84
}
88
85
# endif
0 commit comments