C++ named requirements: AccessorPolicy (since C++23)

From cppreference.com
< cpp‎ | named req
 
 
C++ named requirements
 

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:

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 complete object type that is not an abstract class type
A::data_handle_type (unspecified) but the type need not be element_type*
  • Models copyable
  • The following conditions are all true:
A::reference (unspecified) but the type need not be element_type&
A::offset_policy OP
  • Satisfies the requirements of AccessorPolicy
  • std::constructible_from<OP, const A&> is true
  • typename OP​::​element_type and typename A​::​element_type are the same type

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 value q such that for b being A::offset_policy(a), and any integer n for which [0n) is an accessible range[note 1] of p and a.
  • [0n - i) is an accessible range of q and b; and
  • b.access(q, j) provides access to the same element as a.access(p, i + j), for every j in the range [0n - i).
  1. A range of indices [0N) 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.

See also

a type for indexed access to elements of mdspan
(class template)