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:
- If the corresponding initializer is empty, the data member is value-initialized.
- If the corresponding intiializer is not empty, the data member is direct-non-list-initialized with that initializer.
| 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() > 0std::is_default_constructible_v<data_handle_type>std::is_default_constructible_v<mapping_type>std::is_default_constructible_v<accessor_type>
If
[0, map_ .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
[0, map_ .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
[0, map_ .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
[0, map_ .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
[0, m.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
[0, m.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
[0, map_ .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 |
(until C++26) |
|
If
|
(since C++26) |
Example
| This section is incomplete Reason: no example |
References
- C++23 standard (ISO/IEC 14882:2024):
- 24.7.3.6.2 Constructors [mdspan.mdspan.cons]
