5#ifndef INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_MDSPAN_IS_ACCESSOR_POLICY_HPP_
6#define INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_MDSPAN_IS_ACCESSOR_POLICY_HPP_
8#include "arene/base/constraints/constraints.hpp"
9#include "arene/base/stdlib_choice/cstddef.hpp"
10#include "arene/base/stdlib_choice/declval.hpp"
11#include "arene/base/stdlib_choice/enable_if.hpp"
12#include "arene/base/stdlib_choice/is_abstract.hpp"
13#include "arene/base/stdlib_choice/is_constructible.hpp"
14#include "arene/base/stdlib_choice/is_move_assignable.hpp"
15#include "arene/base/stdlib_choice/is_move_constructible.hpp"
16#include "arene/base/stdlib_choice/is_object.hpp"
17#include "arene/base/stdlib_choice/is_same.hpp"
18#include "arene/base/type_traits/is_copyable.hpp"
19#include "arene/base/type_traits/is_swappable.hpp"
24namespace is_accessor_policy_detail {
28template <
typename AccessorPolicy,
typename = arene::base::constraints<>>
29extern constexpr bool has_typedefs_v =
false;
33template <
typename AccessorPolicy>
34extern constexpr bool has_typedefs_v<
36 arene::base::constraints<
37 typename AccessorPolicy::element_type,
38 typename AccessorPolicy::data_handle_type,
39 typename AccessorPolicy::reference,
40 typename AccessorPolicy::offset_policy,
41 typename AccessorPolicy::offset_policy::element_type>> =
42 std::is_object<
typename AccessorPolicy::element_type>::value &&
43 !std::is_abstract<
typename AccessorPolicy::element_type>::value &&
44 is_copyable_v<
typename AccessorPolicy::data_handle_type> &&
45 std::is_nothrow_move_constructible<
typename AccessorPolicy::data_handle_type>::value &&
46 std::is_nothrow_move_assignable<
typename AccessorPolicy::data_handle_type>::value &&
47 is_nothrow_swappable_v<
typename AccessorPolicy::data_handle_type> &&
48 std::is_constructible<
typename AccessorPolicy::offset_policy, AccessorPolicy
const&>::value &&
49 std::is_same<
typename AccessorPolicy::offset_policy::element_type,
typename AccessorPolicy::element_type>::value;
53template <
typename AccessorPolicy>
54using access_t =
decltype(std::declval<AccessorPolicy
const&>()
55 .access(std::declval<
typename AccessorPolicy::data_handle_type
const&>(), std::size_t{}));
59template <
typename AccessorPolicy>
60using offset_t =
decltype(std::declval<AccessorPolicy
const&>()
61 .offset(std::declval<
typename AccessorPolicy::data_handle_type
const&>(), std::size_t{}));
65template <
typename AccessorPolicy,
typename = arene::base::constraints<>>
66extern constexpr bool has_typedefs_and_functions_v =
false;
70template <
typename AccessorPolicy>
71extern constexpr bool has_typedefs_and_functions_v<
73 arene::base::constraints<
74 std::enable_if_t<has_typedefs_v<AccessorPolicy>>,
75 access_t<AccessorPolicy>,
76 offset_t<AccessorPolicy>>> =
77 std::is_same<access_t<AccessorPolicy>,
typename AccessorPolicy::reference>::value &&
78 std::is_same<offset_t<AccessorPolicy>,
typename AccessorPolicy::offset_policy::data_handle_type>::value;
Definition array_exceptions_disabled.cpp:11
constexpr bool is_accessor_policy_v
Check if a type is a valid accessor policy.
Copyright 2026, Toyota Motor Corporation.
Definition array_exceptions_disabled.cpp:10