std::mdspan<T,Extents,LayoutPolicy,AccessorPolicy>::mdspan
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) |
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
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_
- 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
- std::is_default_constructible_v <accessor_type> is true
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_
- Let N be sizeof...(OtherIndexTypes)
-
- ( 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
- std::is_default_constructible_v <accessor_type> is true
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_
- 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
- std::is_default_constructible_v <accessor_type> is true
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_
- This overload participates in overload resolution only if
-
- std::is_constructible_v <mapping_type, const mapping_type& > is true
- std::is_default_constructible_v <accessor_type> is true
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_
- This overload participates in overload resolution only if std::is_default_constructible_v <accessor_type> is true
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
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_
- 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 - 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 - 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 | - | a std::extents object
|
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:2024):
- 24.7.3.6.2 Constructors [mdspan.mdspan.cons]
See also
This section is incomplete |