@@ -19,17 +19,17 @@ template <class T, size_t N >
19
19
struct array
20
20
{
21
21
// 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>;
33
33
34
34
// No explicit construct/copy/destroy for aggregate type
35
35
void fill(const T& u); // constexpr in C++20
@@ -270,20 +270,25 @@ struct _LIBCPP_TEMPLATE_VIS array {
270
270
template <class _Tp >
271
271
struct _LIBCPP_TEMPLATE_VIS array<_Tp, 0 > {
272
272
// 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>;
287
292
288
293
struct _ArrayInStructT {
289
294
_Tp __data_[1 ];
@@ -440,7 +445,7 @@ struct _LIBCPP_TEMPLATE_VIS tuple_size<array<_Tp, _Size> > : public integral_con
440
445
template <size_t _Ip, class _Tp , size_t _Size>
441
446
struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, array<_Tp, _Size> > {
442
447
static_assert (_Ip < _Size, " Index out of bounds in std::tuple_element<> (std::array)" );
443
- typedef _Tp type;
448
+ using type = _Tp ;
444
449
};
445
450
446
451
template <size_t _Ip, class _Tp , size_t _Size>
0 commit comments