You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jan 29, 2026. It is now read-only.
`(1)` Equivalent to `PRO_DEF_FREE_AS_MEM_DISPATCH(dispatch_name, func_name, func_name);`
18
18
19
-
`(2)` Defines a classnamed`dispatch_name` of free function call expressions of `func_name` with accessibility via a member function. `dispatch_name` meets the [*ProAccessible*](ProAccessible.md) requirements of types `F`, `C`, and `Os...`, where `F` models concept [`facade`](facade.md), `C` is a tuple element type defined in `typename F::convention_types`, and each type `O` (possibly qualified with *cv ref noex*) in `Os...` is a tuple element type defined in `typename C::overload_types`. The member functions provided by `typename dispatch_name::template accessor<F, C, Os...>` are named `accessibility_func_name`. Effectively equivalent to:
19
+
`(2)` Defines a classnamed`dispatch_name` of free function call expressions of `func_name` with accessibility via member function overloads named `accessibility_func_name`. Effectively equivalent to:
`(1)` Equivalent to `PRO_DEF_FREE_DISPATCH(dispatch_name, func_name, func_name);`
18
18
19
-
`(2)` Defines a classnamed`dispatch_name` of free function call expressions of `func_name` with accessibility. `dispatch_name` meets the [*ProAccessible*](ProAccessible.md) requirements of types `F`, `C`, and `Os...`, where `F` models concept [`facade`](facade.md), `C` is a tuple element type defined in `typename F::convention_types`, and each type `O` (possibly qualified with *cv ref noex*) in `Os...` is a tuple element type defined in `typename C::overload_types`. Let `accessor_arg` be `std::conditional_t<C::is_direct, proxy<F>, proxy_indirect_accessor<F>>`. The functions provided by `typename dispatch_name::template accessor<F, C, Os...>` are named `accessibility_func_name` and can be found by [argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl) when `accessor_arg` is an associated class of the arguments. Effectively equivalent to:
19
+
`(2)` Defines a classnamed`dispatch_name` of free function call expressions of `func_name` with accessibility via free function overloads named `accessibility_func_name`. Effectively equivalent to:
`(1)` Equivalent to `PRO_DEF_MEM_DISPATCH(dispatch_name, func_name, func_name);`
18
18
19
-
`(2)` Defines a classnamed`dispatch_name` of member function call expressions of `func_name` with accessibility. `dispatch_name` meets the [*ProAccessible*](ProAccessible.md) requirements of types `F`, `C`, and `Os...`, where `F` models concept [`facade`](facade.md), `C` is a tuple element type defined in `typename F::convention_types`, and each type `O` (possibly qualified with *cv, ref, noex*) in `Os...` is a tuple element type defined in `typename C::overload_types`. The member functions provided by `typename dispatch_name::template accessor<F, C, Os...>` are named `accessibility_func_name`. Effectively equivalent to:
19
+
`(2)` Defines a classnamed`dispatch_name` of member function call expressions of `func_name` with accessibility via member function overloads named `accessibility_func_name`. Effectively equivalent to:
Copy file name to clipboardExpand all lines: docs/ProAccessible.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,10 +1,10 @@
1
1
# Named requirements: *ProAccessible*
2
2
3
-
Given that `F` is a type meeting the [*ProBasicFacade* requirements](ProBasicFacade.md), a type `T` meets the *ProAccessible* requirements of types`F, Args...`, if the following expressions are well-formed and have the specified semantics.
3
+
Given that `F` is a type meeting the [*ProBasicFacade* requirements](ProBasicFacade.md), a type `T` meets the *ProAccessible* requirements of type`F`, if the following expressions are well-formed and have the specified semantics.
|`typename T::template accessor<F, Args...>`| A type that provides accessibility to `proxy`. It shall be a *nothrow-default-constructible*, *trivially-copyable* type, and shall not be [final](https://en.cppreference.com/w/cpp/language/final). |
|`typename T::template accessor<F>`| A type that provides accessibility to `proxy`. It shall be a *nothrow-default-constructible*, *trivially-copyable* type, and shall not be [final](https://en.cppreference.com/w/cpp/language/final). |
Copy file name to clipboardExpand all lines: docs/basic_facade_builder/add_convention.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,12 +18,12 @@ The alias templates `add_convention`, `add_indirect_convention`, and `add_direct
18
18
- `IC::is_direct` is `false`.
19
19
- `typename IC::dispatch_type` is `D`.
20
20
- `typename IC::overload_types` is a [tuple-like](https://en.cppreference.com/w/cpp/utility/tuple/tuple-like) type of distinct types in `Os`.
21
-
- `typename IC::template accessor<F>` is `typename D::template accessor<F, IC, Os...>` if applicable.
21
+
- `typename IC::template accessor<F>` is `typename D::template accessor<F, false, D, Os...>` if applicable.
22
22
- `add_direct_convention` merges an implementation-defined convention type `IC` into `Cs`, where:
23
23
- `IC::is_direct` is `true`.
24
24
- `typename IC::dispatch_type` is `D`.
25
25
- `typename IC::overload_types` is a [tuple-like](https://en.cppreference.com/w/cpp/utility/tuple/tuple-like) type of distinct types in `Os`.
26
-
- `typename IC::template accessor<F>` is `typename D::template accessor<F, IC, Os...>` if applicable.
26
+
- `typename IC::template accessor<F>` is `typename D::template accessor<F, true, D, Os...>` if applicable.
27
27
28
28
When `Cs` already contains a convention type `IC2` where `IC2::is_direct == IC::is_direct && std::is_same_v<typename IC2::dispatch_type, typename IC::dispatch_type>` is `true`, `Os` merges with `typename IC2::overload_types` and removes duplicates, and `std::tuple_size_v<Cs>` shall not change.
Copy file name to clipboardExpand all lines: docs/basic_facade_builder/add_reflection.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,16 +14,16 @@ using add_direct_reflection = basic_facade_builder</* see below */>;
14
14
The alias templates `add_reflection`, `add_indirect_reflection` and `add_direct_reflection` of `basic_facade_builder<Cs, Rs, C>` add reflection types to the template parameters. Specifically,
15
15
16
16
-`add_reflection` is equivalent to `add_indirect_reflection`.
17
-
-`add_indirect_reflection` merges an implementation-defined reflection type `R2` into `Rs`, where:
18
-
-`R2::is_direct` is `false`.
19
-
-`typename R2::reflector_type` is `R`.
20
-
-`typename R2::template accessor<F>` is `typename R2::template accessor<F, R2>` if applicable.
21
-
-`add_direct_reflection` merges an implementation-defined reflection type `R2` into `Rs`, where:
22
-
-`R2::is_direct` is `true`.
23
-
-`typename R2::reflector_type` is `R`.
24
-
-`typename R2::template accessor<F>` is `typename R2::template accessor<F, R2>` if applicable.
17
+
-`add_indirect_reflection` merges an implementation-defined reflection type `Refl` into `Rs`, where:
18
+
-`Refl::is_direct` is `false`.
19
+
-`typename Refl::reflector_type` is `R`.
20
+
-`typename Refl::template accessor<F>` is `typename R::template accessor<F, false, R>` if applicable.
21
+
-`add_direct_reflection` merges an implementation-defined reflection type `Refl` into `Rs`, where:
22
+
-`Refl::is_direct` is `true`.
23
+
-`typename Refl::reflector_type` is `R`.
24
+
-`typename Refl::template accessor<F>` is `typename R::template accessor<F, true, R>` if applicable.
25
25
26
-
When `Rs` already contains `R2`, the template parameters shall not change.
26
+
When `Rs` already contains `Refl`, the template parameters shall not change.
`(1)` The default implementation of `accessor` is not constructible.
25
25
26
-
`(2)` When `sizeof...(Os)` is greater than `1`, and `accessor<F, C, Os>...` are default-constructible, inherits all `accessor<F, C, Os>...` types and `using` their `operator return-type-of<Os>`. `return-type-of<O>` denotes the *return type* of the overload type `O`.
26
+
`(2)` When `sizeof...(Os)` is greater than `1`, and `accessor<F, IsDirect, D, Os>...` are default-constructible, inherits all `accessor<F, IsDirect, D, Os>...` types and `using` their `operator return-type-of<Os>`. `return-type-of<O>` denotes the *return type* of the overload type `O`.
27
27
28
-
`(3)` When `sizeof...(Os)` is `1` and the only type `O` in `Os` is `T() cv ref noex`, provides an explicit `operator T()` with the same *cv ref noex* specifiers. `accessor::operator T()` is equivalent to `return proxy_invoke<C, T() cv ref noex>(access_proxy<F>(std::forward<accessor cv ref>(*this)))`.
28
+
`(3)` When `sizeof...(Os)` is `1` and the only type `O` in `Os` is `T() cv ref noex`, provides an explicit `operator T()` with the same *cv ref noex* specifiers. `accessor::operator T()` is equivalent to `return proxy_invoke<IsDirect, D, T() cv ref noex>(access_proxy<F>(std::forward<accessor cv ref>(*this)))`.
`(1)` The default implementation of `accessor` is not constructible.
25
25
26
-
`(2)` When `sizeof...(Os)` is greater than `1`, and `accessor<F, C, Os>...` are default-constructible, inherits all `accessor<F, C, Os>...` types and `using` their `operator return-type-of<Os>`. `return-type-of<O>` denotes the *return type* of the overload type `O`.
26
+
`(2)` When `sizeof...(Os)` is greater than `1`, and `accessor<F, IsDirect, D, Os>...` are default-constructible, inherits all `accessor<F, IsDirect, D, Os>...` types and `using` their `operator return-type-of<Os>`. `return-type-of<O>` denotes the *return type* of the overload type `O`.
27
27
28
-
`(3)` When `sizeof...(Os)` is `1` and the only type `O` in `Os` is `T() cv ref noex`, provides an implicit `operator T()` with the same *cv ref noex* specifiers. `accessor::operator T()` is equivalent to `return proxy_invoke<C, T() cv ref noex>(access_proxy<F>(std::forward<accessor cv ref>(*this)))`.
28
+
`(3)` When `sizeof...(Os)` is `1` and the only type `O` in `Os` is `T() cv ref noex`, provides an implicit `operator T()` with the same *cv ref noex* specifiers. `accessor::operator T()` is equivalent to `return proxy_invoke<IsDirect, D, T() cv ref noex>(access_proxy<F>(std::forward<accessor cv ref>(*this)))`.
0 commit comments