std::mdspan<T,Extents,LayoutPolicy,AccessorPolicy>::mdspan - cppreference.com
Namespaces
Variants

std::mdspan<T,Extents,LayoutPolicy,AccessorPolicy>::mdspan

From cppreference.com
 
 
 
 
constexpr mdspan();
(1) (since C++23)
template< class... OtherIndexTypes >
    constexpr explicit mdspan( data_handle_type p, OtherIndexTypes... exts );
(2) (since C++23)
template< class OtherIndexType, std::size_t N >
    constexpr explicit(N != rank_dynamic())
        mdspan( data_handle_type p, std::span<OtherIndexType, N> exts );
(3) (since C++23)
template< class OtherIndexType, std::size_t N >
    constexpr explicit(N != rank_dynamic())
        mdspan( data_handle_type p,
                const std::array<OtherIndexType, N>& exts );
(4) (since C++23)
constexpr mdspan( data_handle_type p, const extents_type& ext );
(5) (since C++23)
constexpr mdspan( data_handle_type p, const mapping_type& m );
(6) (since C++23)
constexpr mdspan( data_handle_type p, const mapping_type& m,
                  const accessor_type& a );
(7) (since C++23)
template< class OtherElementType, class OtherExtents,
          class OtherLayoutPolicy, class OtherAccessor >
    constexpr explicit(/* see below */)
        mdspan( const mdspan<OtherElementType, OtherExtents,
                             OtherLayoutPolicy, OtherAccessor>& other );
(8) (since C++23)
constexpr mdspan( const mdspan& rhs ) = default;
(9) (since C++23)
constexpr mdspan( mdspan&& rhs ) = default;
(10) (since C++23)

Constructs an mdspan, optionally using user-supplied data handle p, layout mapping m, and accessor a. If extents exts or ext are supplied, they are converted to extents_type and used to initialize the layout mapping.

Parameters

p - a handle to the underlying data
m - a layout mapping
a - an accessor
ext - a std::extents object
exts - represents a multi-dimensional extents
other - another mdspan to convert from
rhs - another mdspan to copy or move from

Effects

For the data members listed in the table below:

 Overload  Initializer for...
ptr_ map_ acc_
(1) (empty)
(2) std::move(p) extents_type
(static_cast<index_type>
(std::move(exts))...)
(empty)
(3) extents_type(exts)
(4)
(5) ext
(6) m
(7) a
(8) other.ptr_ other.map_ other.acc_

Constraints and supplement information

1) This overload participates in overload resolution only if all following values are true:
  • rank_dynamic() > 0
  • std::is_default_constructible_v<data_handle_type>
  • std::is_default_constructible_v<mapping_type>
  • std::is_default_constructible_v<accessor_type>
If [0map_ .required_span_size()) is not an accessible range of ptr_ and acc_ for the values of map_ and acc_ after the invocation of this constructor, the behavior is undefined.
2) This overload participates in overload resolution only if all following values are true:
  • (std::is_convertible_v<OtherIndexTypes, index_type> && ...)
  • (std::is_nothrow_constructible<index_type, OtherIndexTypes> && ...)
  • sizeof...(OtherIndexTypes) == rank() || sizeof...(OtherIndexTypes) == rank_dynamic()
  • std::is_constructible_v<mapping_type, extents_type>
  • std::is_default_constructible_v<accessor_type>
If [0map_ .required_span_size()) is not an accessible range of p and acc_ for the values of map_ and acc_ after the invocation of these constructors, the behavior is undefined.
3,4) These overloads participate in overload resolution only if all following values are true:
  • std::is_convertible_v<const OtherIndexType&, index_type>
  • std::is_nothrow_constructible_v<index_type, const OtherIndexType&>
  • N == rank() || N == rank_dynamic()
  • std::is_constructible_v<mapping_type, extents_type>
  • std::is_default_constructible_v<accessor_type>
If [0map_ .required_span_size()) is not an accessible range of p and acc_ for the values of map_ and acc_ after the invocation of these constructors, the behavior is undefined.
5) This overload participates in overload resolution only if all following values are true:
  • std::is_constructible_v<mapping_type, const extents_type&>
  • std::is_default_constructible_v<accessor_type>
If [0map_ .required_span_size()) is not an accessible range of p and acc_ for the values of map_ and acc_ after the invocation of these constructors, the behavior is undefined.
6) This overload participates in overload resolution only if std::is_default_constructible_v<accessor_type> is true.
If [0m.required_span_size()) is an accessible range of p and acc_ for the value of acc_ after the invocation of this constructor, the behavior is undefined.
7) If [0m.required_span_size()) is not an accessible range of p and a, the behavior is undefined.
8) The expression inside explicit is equivalent to !std::is_convertible_v<const OtherLayoutPolicy::template mapping<OtherExtents>&,
mapping_type>
|| !std::is_convertible_v<const OtherAccessor&, accessor_type>
.
This overload participates in overload resolution only if all following values are true:
  • std::is_constructible_v
    <mapping_type, const OtherLayoutPolicy::template mapping<OtherExtents>&>
  • std::is_default_constructible_v<accessor_type>
If any of the following values is false, the program is ill-formed:
  • std::is_constructible_v<data_handle_type, const OtherAccessor::data_handle_type&>
  • std::is_constructible_v<extents_type, OtherExtents>
If [0map_ .required_span_size()) is not an accessible range of ptr_ and acc_ for the values of ptr_, map_ and acc_ after the invocation of this constructor, the behavior is undefined.

If static_extent(r) == std::dynamic_extent
|| static_extent(r) == other.extent(r)
is false for some rank index r of extents_type, the behavior is undefined.

(until C++26)

If static_extent(r) == std::dynamic_extent
|| static_extent(r) == other.extent(r)
is false for some rank index r of extents_type:

(since C++26)

Example

References

  • C++23 standard (ISO/IEC 14882:2024):
  • 24.7.3.6.2 Constructors [mdspan.mdspan.cons]

See also