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()) |
(3) | (since C++23) |
template< class OtherIndexType, std::size_t N > constexpr explicit(N != rank_dynamic()) |
(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 > |
(8) | (since C++23) |
constexpr mdspan( const mdspan& rhs ) = default; |
(9) | (since C++23) |
constexpr mdspan( mdspan&& rhs ) = default; |
(10) | (since C++23) |
Construct an mdspan
.
1) Construct an empty mdspan. Value-initializes
ptr_
, map_
, and acc_
.
- The behavior is undefined if
[
0,
map_.required_span_size())
is not an accessible range ofptr_
andacc_
for the values ofmap_
andacc_
after the invocation of this constructor. - This overload participates in overload resolution only if
- rank_dynamic() > 0 is true,
- std::is_default_constructible_v<data_handle_type> is true,
- std::is_default_constructible_v<mapping_type> is true, and
- std::is_default_constructible_v<accessor_type> is true.
2) Construct an mdspan over the underlying data referred by p with extents represented by
exts...
. Value-initializes acc_
, direct-non-list-initializes ptr_
with std::move(p) and map_
with extents_type(static_cast<index_type>(std::move(exts))...).
- The behavior is undefined if
[
0,
map_.required_span_size())
is not an accessible range ofptr_
andacc_
for the values ofmap_
andacc_
after the invocation of this constructor. - Let N be sizeof...(OtherIndexTypes). This overload participates in overload resolution only if
- (std::is_convertible_v<OtherIndexTypes, index_type> && ...) is true,
- (std::is_nothrow_constructible<index_type, OtherIndexTypes> && ...) is true,
- N == rank() || N == rank_dynamic() is true,
- std::is_constructible_v<mapping_type, extents_type> is true, and
- std::is_default_constructible_v<accessor_type> is true.
3,4) Construct an mdspan over the underlying data referred by p with extents represented by pack exts. Value-initializes
acc_
, direct-non-list-initializes ptr_
with std::move(p) and map_
with extents_type(exts).
- The behavior is undefined if
[
0,
map_.required_span_size())
is not an accessible range ofptr_
andacc_
for the values ofmap_
andacc_
after the invocation of this constructor. - This overload participates in overload resolution only if
- std::is_convertible_v<const OtherIndexTypes&, index_type> is true,
- std::is_nothrow_constructible<index_type, const OtherIndexTypes&> is true,
- N == rank() || N == rank_dynamic() is true,
- std::is_constructible_v<mapping_type, extents_type> is true, and
- std::is_default_constructible_v<accessor_type> is true.
5) Construct an mdspan over the underlying data referred by p with extents represented by ext. Value-initializes
acc_
, direct-non-list-initializes ptr_
with std::move(p) and map_
with exts.
- The behavior is undefined if
[
0,
map_.required_span_size())
is not an accessible range of p andacc_
for the values ofmap_
andacc_
after the invocation of this constructor. - This overload participates in overload resolution only if
- std::is_constructible_v<mapping_type, const mapping_type&> is true, and
- std::is_default_constructible_v<accessor_type> is true.
6) Construct an mdspan over the underlying data referred by p with layout mapping m. Value-initializes
acc_
, direct-non-list-initializes ptr_
with std::move(p) and map_
with m.
- The behavior is undefined if
[
0,
m.required_span_size())
is not an accessible range of p andacc_
for the values ofacc_
after the invocation of this constructor. - This overload participates in overload resolution only if std::is_default_constructible_v<accessor_type> is true.
7) Construct an mdspan over the underlying data referred by p with layout mapping m and accessor a. Direct-non-list-initializes
ptr_
with std::move(p), map_
with m and acc_
with a.
- The behavior is undefined if
[
0,
m.required_span_size())
is not an accessible range of p and a after the invocation of this constructor.
8) Converting constructor from another mdspan. Direct-non-list-initializes
ptr_
with other.ptr_, map_
with other.map_ and acc_
with other.acc_.
- The behavior is undefined if :
-
[
0,
map_.required_span_size())
is not an accessible range ofptr_
andacc_
for the values ofmap_
andacc_
after the invocation of this constructor, or - for each rank index
r
of extents_type, extents_type::static_extent(r) == std::dynamic_extent
|| extents_type::static_extent(r) == other.extent(r) is false.
-
- This overload participates in overload resolution only if
- std::is_constructible_v<mapping_type, const OtherLayoutPolicy::
template mapping<OtherExtents>&> is true, and - std::is_constructible_v<accessor_type, const OtherAccessor&> is true.
- std::is_constructible_v<mapping_type, const OtherLayoutPolicy::
- The program is ill-formed if:
- std::is_constructible_v<data_handle_type,
const OtherAccessor::data_handle_type&> is false, or - std::is_constructible_v<extents_type, OtherExtents> is false.
- std::is_constructible_v<data_handle_type,
- 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>
Parameters
p | - | a handle to the underlying data |
m | - | a layout mapping |
a | - | an accessor |
ext | - | represents a one-dimensional extents |
exts | - | represents a multi-dimensional extents |
other | - | another mdspan to convert from |
rhs | - | another mdspan to copy or move from |
Example
This section is incomplete Reason: no example |
References
- C++23 standard (ISO/IEC 14882:2023):
- 24.7.3.6.2 Constructors [mdspan.mdspan.cons]
See also
This section is incomplete |