layout_right_padded provides a layout mapping
that behaves like 
layout_right::mapping,
except that the padding stride 
stride(extents_type::rank() - 2)
can be greater than or equal to
extents_type::extent(extents_type::rank() - 1). namespace std {
  template<size_t PaddingValue>
  template<class Extents>
  class layout_right_padded<PaddingValue>::mapping {
  public:
    static constexpr size_t padding_value = PaddingValue;
    using extents_type = Extents;
    using index_type = extents_type::index_type;
    using size_type = extents_type::size_type;
    using rank_type = extents_type::rank_type;
    using layout_type = layout_right_padded<PaddingValue>;
  private:
    static constexpr size_t rank_ = extents_type::rank();    
    static constexpr size_t last-static-extent =             
      extents_type::static_extent(rank_ - 1);
    
    static constexpr size_t static-padding-stride = see below; 
  public:
    
    constexpr mapping() noexcept : mapping(extents_type{}) {}
    constexpr mapping(const mapping&) noexcept = default;
    constexpr mapping(const extents_type&);
    template<class OtherIndexType>
      constexpr mapping(const extents_type&, OtherIndexType);
    template<class OtherExtents>
      constexpr explicit(!is_convertible_v<OtherExtents, extents_type>)
        mapping(const layout_right::mapping<OtherExtents>&);
    template<class OtherExtents>
      constexpr explicit(rank_ > 0)
        mapping(const layout_stride::mapping<OtherExtents>&);
    template<class LayoutRightPaddedMapping>
      constexpr explicit(see below)
        mapping(const LayoutRightPaddedMapping&);
    template<class LayoutLeftPaddedMapping>
      constexpr explicit(see below)
        mapping(const LayoutLeftPaddedMapping&) noexcept;
    constexpr mapping& operator=(const mapping&) noexcept = default;
    
    constexpr const extents_type& extents() const noexcept { return extents_; }
    constexpr array<index_type, rank_> strides() const noexcept;
    constexpr index_type required_span_size() const noexcept;
    template<class... Indices>
      constexpr index_type operator()(Indices...) const noexcept;
    static constexpr bool is_always_unique() noexcept { return true; }
    static constexpr bool is_always_exhaustive() noexcept;
    static constexpr bool is_always_strided() noexcept { return true; }
    static constexpr bool is_unique() noexcept { return true; }
    constexpr bool is_exhaustive() const noexcept;
    static constexpr bool is_strided() noexcept { return true; }
    constexpr index_type stride(rank_type) const noexcept;
    template<class LayoutRightPaddedMapping>
      friend constexpr bool operator==(const mapping&, const LayoutRightPaddedMapping&) noexcept;
  private:
    
    index_type stride-rm2 = static-padding-stride;                         
    extents_type extents_{};                                               
    
    template<class... SliceSpecifiers>
      constexpr auto submdspan-mapping-impl(SliceSpecifiers...) const     
        -> see below;
    template<class... SliceSpecifiers>
      friend constexpr auto submdspan_mapping(const mapping& src, SliceSpecifiers... slices) {
      return src.submdspan-mapping-impl(slices...);
    }
  };
}