namespace std {
  template<class ElementType>
  struct default_accessor {
    using offset_policy = default_accessor;
    using element_type = ElementType;
    using reference = ElementType&;
    using data_handle_type = ElementType*;
    constexpr default_accessor() noexcept = default;
    template<class OtherElementType>
      constexpr default_accessor(default_accessor<OtherElementType>) noexcept;
    constexpr reference access(data_handle_type p, size_t i) const noexcept;
    constexpr data_handle_type offset(data_handle_type p, size_t i) const noexcept;
  };
}
default_accessor meets the accessor policy requirements
. ElementType is required to be a complete object type
that is neither an abstract class type nor an array type
. Each specialization of 
default_accessor is
a trivially copyable type that models 
semiregular.[0,n) is an accessible range for
an object 
p of type 
data_handle_type and
an object of type 
default_accessor
if and only if [
p, p + n) is a valid range
.