4.9 KiB
[linalg.helpers.concepts]
29 Numerics library [numerics]
29.9 Basic linear algebra algorithms [linalg]
29.9.7 Exposition-only helpers [linalg.helpers]
29.9.7.5 Argument concepts [linalg.helpers.concepts]
The exposition-only concepts defined in this section constrain the algorithms in [linalg].
templateconstexpr bool is-mdspan = false;
template<class ElementType, class Extents, class Layout, class Accessor>constexpr bool is-mdspan<mdspan<ElementType, Extents, Layout, Accessor>> = true;
templateconcept in-vector =is-mdspan && T::rank() == 1;
templateconcept out-vector =is-mdspan && T::rank() == 1 && is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();
templateconcept inout-vector =is-mdspan && T::rank() == 1 && is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();
templateconcept in-matrix =is-mdspan && T::rank() == 2;
templateconcept out-matrix =is-mdspan && T::rank() == 2 && is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();
templateconcept inout-matrix =is-mdspan && T::rank() == 2 && is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();
templateconstexpr bool is-layout-blas-packed = false; // exposition onlytemplate<class Triangle, class StorageOrder>constexpr bool is-layout-blas-packed<layout_blas_packed<Triangle, StorageOrder>> = true;
templateconcept possibly-packed-inout-matrix =is-mdspan && T::rank() == 2 && is_assignable_v<typename T::reference, typename T::element_type> &&(T::is_always_unique() || is-layout-blas-packed);
templateconcept in-object =is-mdspan && (T::rank() == 1 || T::rank() == 2);
templateconcept out-object =is-mdspan && (T::rank() == 1 || T::rank() == 2) && is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();
templateconcept inout-object =is-mdspan && (T::rank() == 1 || T::rank() == 2) && is_assignable_v<typename T::reference, typename T::element_type> && T::is_always_unique();
If a function in [linalg] accesses the elements of a parameter constrained byin-vector,in-matrix, orin-object, those accesses will not modify the elements.
Unless explicitly permitted, anyinout-vector,inout-matrix,inout-object,out-vector,out-matrix,out-object, orpossibly-packed-inout-matrix parameter of a function in [linalg] shall not overlap any other mdspan parameter of the function.