C++ named requirements: AccessorPolicy (since C++23)
From cppreference.com
AccessorPolicy defines how elements are accessed from a given data handle to such elements and an index. It is used as a policy in std::mdspan to specify the access to a reference of an element using an underlying 1D index.
Requirements
A type A satisfies AccessorPolicy if it models copyable, and the following are true:
- std::is_nothrow_move_constructible_v<A>
- std::is_nothrow_move_assignable_v<A>
- std::is_nothrow_swappable_v<A>
And, given the following types and values, the expressions shown in the table below are valid and have the indicated semantics:
Legend
| Type | Definition |
A
|
an accessor policy type |
OP
|
an offset policy type |
| Value | Definition |
| a | a value of type (possibly const-qualified) A
|
| p | a value of type (possibly const-qualified) A::data_handle_type
|
| i, j, n | values of type std::size_t |
Member types
| Name | Type | Requirements |
|---|---|---|
A::element_type |
(unspecified) |
|
A::data_handle_type |
(unspecified) but the type need not be element_type* |
|
A::reference |
(unspecified) but the type need not be element_type& |
|
A::offset_policy |
OP |
|
Member functions
| Expression | Return type | Semantics |
|---|---|---|
| a.access(p, i) | typename A::reference |
|
| a.offset(p, i) | typename A::offset_policy::data_handle_type |
|
- ↑ A range of indices
[0,N)is an accessible range of a given data handle and an accessor if, for each index in the range, the access member function produces a valid reference to an element.
Standard library
The following standard library types satisfy AccessorPolicy requirements:
| (C++23) |
a type for indexed access to elements of mdspan (class template) |
| (C++26) |
a type for aligned access to elements of mdspan (class template) |
| Defined in namespace
std::linalg | |
| (C++26) |
std::mdspan accessor policy whose reference represents the product of a scaling factor that is fixed and its nested std::mdspan accessor's reference (class template) |
| (C++26) |
std::mdspan accessor policy whose reference represents the complex conjugate of its nested std::mdspan accessor's reference (class template) |