28
Numerics library
[numerics]
28.9
Basic linear algebra algorithms
[linalg]
28.9.7
Exposition-only helpers
[linalg.helpers]
28.9.7.5
Argument concepts
[linalg.helpers.concepts]
1
#
The exposition-only concepts defined in this section constrain the algorithms in
[linalg]
.
template
<
class
T
>
constexpr
bool
is-mdspan
=
false
;
template
<
class
ElementType,
class
Extents,
class
Layout,
class
Accessor
>
constexpr
bool
is-mdspan
<
mdspan
<
ElementType, Extents, Layout, Accessor
>
>
=
true
;
template
<
class
T
>
concept
in-vector
=
is-mdspan
<
T
>
&
&
T
::
rank
(
)
=
=
1
;
template
<
class
T
>
concept
out-vector
=
is-mdspan
<
T
>
&
&
T
::
rank
(
)
=
=
1
&
&
is_assignable_v
<
typename
T
::
reference,
typename
T
::
element_type
>
&
&
T
::
is_always_unique
(
)
;
template
<
class
T
>
concept
inout-vector
=
is-mdspan
<
T
>
&
&
T
::
rank
(
)
=
=
1
&
&
is_assignable_v
<
typename
T
::
reference,
typename
T
::
element_type
>
&
&
T
::
is_always_unique
(
)
;
template
<
class
T
>
concept
in-matrix
=
is-mdspan
<
T
>
&
&
T
::
rank
(
)
=
=
2
;
template
<
class
T
>
concept
out-matrix
=
is-mdspan
<
T
>
&
&
T
::
rank
(
)
=
=
2
&
&
is_assignable_v
<
typename
T
::
reference,
typename
T
::
element_type
>
&
&
T
::
is_always_unique
(
)
;
template
<
class
T
>
concept
inout-matrix
=
is-mdspan
<
T
>
&
&
T
::
rank
(
)
=
=
2
&
&
is_assignable_v
<
typename
T
::
reference,
typename
T
::
element_type
>
&
&
T
::
is_always_unique
(
)
;
template
<
class
T
>
constexpr
bool
is-layout-blas-packed
=
false
;
//
exposition only
template
<
class
Triangle,
class
StorageOrder
>
constexpr
bool
is-layout-blas-packed
<
layout_blas_packed
<
Triangle, StorageOrder
>
>
=
true
;
template
<
class
T
>
concept
possibly-packed-inout-matrix
=
is-mdspan
<
T
>
&
&
T
::
rank
(
)
=
=
2
&
&
is_assignable_v
<
typename
T
::
reference,
typename
T
::
element_type
>
&
&
(
T
::
is_always_unique
(
)
|
|
is-layout-blas-packed
<
typename
T
::
layout_type
>
)
;
template
<
class
T
>
concept
in-object
=
is-mdspan
<
T
>
&
&
(
T
::
rank
(
)
=
=
1
|
|
T
::
rank
(
)
=
=
2
)
;
template
<
class
T
>
concept
out-object
=
is-mdspan
<
T
>
&
&
(
T
::
rank
(
)
=
=
1
|
|
T
::
rank
(
)
=
=
2
)
&
&
is_assignable_v
<
typename
T
::
reference,
typename
T
::
element_type
>
&
&
T
::
is_always_unique
(
)
;
template
<
class
T
>
concept
inout-object
=
is-mdspan
<
T
>
&
&
(
T
::
rank
(
)
=
=
1
|
|
T
::
rank
(
)
=
=
2
)
&
&
is_assignable_v
<
typename
T
::
reference,
typename
T
::
element_type
>
&
&
T
::
is_always_unique
(
)
;
2
#
If a function in
[linalg]
accesses the elements of a parameter constrained by
in-vector
,
in-matrix
, or
in-object
, those accesses will not modify the elements
.
3
#
Unless explicitly permitted, any
inout-vector
,
inout-matrix
,
inout-object
,
out-vector
,
out-matrix
,
out-object
, or
possibly-packed-inout-matrix
parameter of a function in
[linalg]
shall not overlap any other
mdspan
parameter of the function
.