An 
array satisfies all of the requirements of a container and
of a reversible container (
[container.requirements]), except that a default
constructed 
array object is not empty and that 
swap does not have constant
complexity
.   Descriptions are provided here
only for operations on 
array that are not described in
one of these tables and
for operations where there is additional semantic information
.
namespace std {
  template <class T, size_t N>
  struct array {
        using value_type             = T;
    using pointer                = T*;
    using const_pointer          = const T*;
    using reference              = T&;
    using const_reference        = const T&;
    using size_type              = size_t;
    using difference_type        = ptrdiff_t;
    using iterator               = implementation-defined;     using const_iterator         = implementation-defined;     using reverse_iterator       = std::reverse_iterator<iterator>;
    using const_reverse_iterator = std::reverse_iterator<const_iterator>;
    
    void fill(const T& u);
    void swap(array&) noexcept(is_nothrow_swappable_v<T>);
        constexpr iterator               begin() noexcept;
    constexpr const_iterator         begin() const noexcept;
    constexpr iterator               end() noexcept;
    constexpr const_iterator         end() const noexcept;
    constexpr reverse_iterator       rbegin() noexcept;
    constexpr const_reverse_iterator rbegin() const noexcept;
    constexpr reverse_iterator       rend() noexcept;
    constexpr const_reverse_iterator rend() const noexcept;
    constexpr const_iterator         cbegin() const noexcept;
    constexpr const_iterator         cend() const noexcept;
    constexpr const_reverse_iterator crbegin() const noexcept;
    constexpr const_reverse_iterator crend() const noexcept;
        constexpr bool      empty() const noexcept;
    constexpr size_type size() const noexcept;
    constexpr size_type max_size() const noexcept;
        constexpr reference       operator[](size_type n);
    constexpr const_reference operator[](size_type n) const;
    constexpr reference       at(size_type n);
    constexpr const_reference at(size_type n) const;
    constexpr reference       front();
    constexpr const_reference front() const;
    constexpr reference       back();
    constexpr const_reference back() const;
    constexpr T *       data() noexcept;
    constexpr const T * data() const noexcept;
  };
  template<class T, class... U>
    array(T, U...) -> array<T, 1 + sizeof...(U)>;
}