@@ -19,17 +19,17 @@ template <class T, size_t N >
1919struct array
2020{
2121 // types:
22- typedef T & reference ;
23- typedef const T & const_reference ;
24- typedef implementation defined iterator ;
25- typedef implementation defined const_iterator ;
26- typedef size_t size_type ;
27- typedef ptrdiff_t difference_type ;
28- typedef T value_type ;
29- typedef T* pointer ;
30- typedef const T* const_pointer ;
31- typedef std::reverse_iterator<iterator> reverse_iterator ;
32- typedef std::reverse_iterator<const_iterator> const_reverse_iterator ;
22+ using value_type = T ;
23+ using pointer = T* ;
24+ using const_pointer = const T* ;
25+ using reference = T& ;
26+ using const_reference = const T& ;
27+ using size_type = size_t ;
28+ using difference_type = ptrdiff_t ;
29+ using iterator = implementation-defined ;
30+ using const_iterator = implementation-defined ;
31+ using reverse_iterator = std::reverse_iterator<iterator>;
32+ using const_reverse_iterator = std::reverse_iterator<const_iterator>;
3333
3434 // No explicit construct/copy/destroy for aggregate type
3535 void fill(const T& u); // constexpr in C++20
@@ -270,20 +270,25 @@ struct _LIBCPP_TEMPLATE_VIS array {
270270template <class _Tp >
271271struct _LIBCPP_TEMPLATE_VIS array<_Tp, 0 > {
272272 // types:
273- typedef array __self;
274- typedef _Tp value_type;
275- typedef value_type& reference;
276- typedef const value_type& const_reference;
277- typedef value_type* iterator;
278- typedef const value_type* const_iterator;
279- typedef value_type* pointer;
280- typedef const value_type* const_pointer;
281- typedef size_t size_type;
282- typedef ptrdiff_t difference_type;
283- typedef std::reverse_iterator<iterator> reverse_iterator;
284- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
285-
286- typedef __conditional_t <is_const<_Tp>::value, const __empty, __empty> _EmptyType;
273+ using __self = array;
274+ using value_type = _Tp;
275+ using reference = value_type&;
276+ using const_reference = const value_type&;
277+ using pointer = value_type*;
278+ using const_pointer = const value_type*;
279+ #if defined(_LIBCPP_ABI_USE_WRAP_ITER_IN_STD_ARRAY)
280+ using iterator = __wrap_iter<pointer>;
281+ using const_iterator = __wrap_iter<const_pointer>;
282+ #else
283+ using iterator = pointer;
284+ using const_iterator = const_pointer;
285+ #endif
286+ using size_type = size_t ;
287+ using difference_type = ptrdiff_t ;
288+ using reverse_iterator = std::reverse_iterator<iterator>;
289+ using const_reverse_iterator = std::reverse_iterator<const_iterator>;
290+
291+ using _EmptyType = __conditional_t <is_const<_Tp>::value, const __empty, __empty>;
287292
288293 struct _ArrayInStructT {
289294 _Tp __data_[1 ];
@@ -440,7 +445,7 @@ struct _LIBCPP_TEMPLATE_VIS tuple_size<array<_Tp, _Size> > : public integral_con
440445template <size_t _Ip, class _Tp , size_t _Size>
441446struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, array<_Tp, _Size> > {
442447 static_assert (_Ip < _Size, " Index out of bounds in std::tuple_element<> (std::array)" );
443- typedef _Tp type;
448+ using type = _Tp ;
444449};
445450
446451template <size_t _Ip, class _Tp , size_t _Size>
0 commit comments