// FCP guest_std (rexglue/UPSTREAM.md, change 140): freestanding replacement, see README.md.
#pragma once
#include <cstddef>
#include <initializer_list>
namespace std {
template <class T, size_t N>
class array {
 public:
  using value_type = T;
  using size_type = size_t;
  using reference = T&;
  using const_reference = const T&;
  using iterator = T*;
  using const_iterator = const T*;
  constexpr T& operator[](size_t i) noexcept { return _Elems[i]; }
  constexpr const T& operator[](size_t i) const noexcept { return _Elems[i]; }
  constexpr T* data() noexcept { return _Elems; }
  constexpr const T* data() const noexcept { return _Elems; }
  constexpr T* begin() noexcept { return _Elems; }
  constexpr const T* begin() const noexcept { return _Elems; }
  constexpr T* end() noexcept { return _Elems + N; }
  constexpr const T* end() const noexcept { return _Elems + N; }
  constexpr T& front() noexcept { return _Elems[0]; }
  constexpr const T& front() const noexcept { return _Elems[0]; }
  constexpr T& back() noexcept { return _Elems[N - 1]; }
  constexpr const T& back() const noexcept { return _Elems[N - 1]; }
  static constexpr size_t size() noexcept { return N; }
  static constexpr bool empty() noexcept { return N == 0; }
  constexpr void fill(const T& v) {
    for (size_t i = 0; i < N; ++i) _Elems[i] = v;
  }
  T _Elems[N == 0 ? 1 : N];
};
template <class T, class... U>
array(T, U...) -> array<T, 1 + sizeof...(U)>;
}  // namespace std
