tmp/tmpu09_29c4/{from.md → to.md}
RENAMED
|
@@ -364,11 +364,11 @@ template<class T, class U>
|
|
| 364 |
Let `C` be `common_reference_t<T, U>`. Let `t1` and `t2` be
|
| 365 |
equality-preserving expressions [[concepts.equality]] such that
|
| 366 |
`decltype((t1))` and `decltype((t2))` are each `T`, and let `u1` and
|
| 367 |
`u2` be equality-preserving expressions such that `decltype((u1))` and
|
| 368 |
`decltype((u2))` are each `U`. `T` and `U` model
|
| 369 |
-
`common_reference_with<T, U>` only if
|
| 370 |
|
| 371 |
- `C(t1)` equals `C(t2)` if and only if `t1` equals `t2`, and
|
| 372 |
- `C(u1)` equals `C(u2)` if and only if `u1` equals `u2`.
|
| 373 |
|
| 374 |
[*Note 1*: Users can customize the behavior of `common_reference_with`
|
|
@@ -404,11 +404,11 @@ template<class T, class U>
|
|
| 404 |
Let `C` be `common_type_t<T, U>`. Let `t1` and `t2` be
|
| 405 |
equality-preserving expressions [[concepts.equality]] such that
|
| 406 |
`decltype((t1))` and `decltype((t2))` are each `T`, and let `u1` and
|
| 407 |
`u2` be equality-preserving expressions such that `decltype((u1))` and
|
| 408 |
`decltype((u2))` are each `U`. `T` and `U` model `common_with<T, U>`
|
| 409 |
-
only if
|
| 410 |
|
| 411 |
- `C(t1)` equals `C(t2)` if and only if `t1` equals `t2`, and
|
| 412 |
- `C(u1)` equals `C(u2)` if and only if `u1` equals `u2`.
|
| 413 |
|
| 414 |
[*Note 1*: Users can customize the behavior of `common_with` by
|
|
@@ -721,11 +721,11 @@ conventional semantics.
|
|
| 721 |
template<class T>
|
| 722 |
concept boolean-testable-impl = convertible_to<T, bool>; // exposition only
|
| 723 |
```
|
| 724 |
|
| 725 |
Let `e` be an expression such that `decltype((e))` is `T`. `T` models
|
| 726 |
-
`boolean-testable-impl` only if
|
| 727 |
|
| 728 |
- either `remove_cvref_t<T>` is not a class type, or a search for the
|
| 729 |
names `operator&&` and `operator||` in the scope of
|
| 730 |
`remove_cvref_t<T>` finds nothing; and
|
| 731 |
- argument-dependent lookup [[basic.lookup.argdep]] for the names
|
|
@@ -820,11 +820,11 @@ template<class T, class U>
|
|
| 820 |
|
| 821 |
Let `C` be `common_reference_t<const T&, const U&>`. Let `t1` and `t2`
|
| 822 |
be equality-preserving expressions that are lvalues of type
|
| 823 |
`remove_cvref_t<T>`, and let `u1` and `u2` be equality-preserving
|
| 824 |
expressions that are lvalues of type `remove_cvref_t<U>`. `T` and `U`
|
| 825 |
-
model `comparison-common-type-with<T, U>` only if
|
| 826 |
|
| 827 |
- `CONVERT_TO_LVALUE<C>(t1)` equals `CONVERT_TO_LVALUE<C>(t2)` if and
|
| 828 |
only if `t1` equals `t2`, and
|
| 829 |
- `CONVERT_TO_LVALUE<C>(u1)` equals `CONVERT_TO_LVALUE<C>(u2)` if and
|
| 830 |
only if `u1` equals `u2`
|
|
@@ -972,13 +972,12 @@ similarly to fundamental types like `int` and that are comparable with
|
|
| 972 |
|
| 973 |
## Callable concepts <a id="concepts.callable">[[concepts.callable]]</a>
|
| 974 |
|
| 975 |
### General <a id="concepts.callable.general">[[concepts.callable.general]]</a>
|
| 976 |
|
| 977 |
-
The concepts in
|
| 978 |
-
|
| 979 |
-
arguments.
|
| 980 |
|
| 981 |
### Concept <a id="concept.invocable">[[concept.invocable]]</a>
|
| 982 |
|
| 983 |
The `invocable` concept specifies a relationship between a callable type
|
| 984 |
[[func.def]] `F` and a set of argument types `Args...` which can be
|
|
@@ -1004,12 +1003,13 @@ template<class F, class... Args>
|
|
| 1004 |
|
| 1005 |
The `invoke` function call expression shall be
|
| 1006 |
equality-preserving [[concepts.equality]] and shall not modify the
|
| 1007 |
function object or the arguments.
|
| 1008 |
|
| 1009 |
-
[*Note 1*: This requirement supersedes the
|
| 1010 |
-
|
|
|
|
| 1011 |
|
| 1012 |
[*Example 1*: A random number generator does not model
|
| 1013 |
`regular_invocable`. — *end example*]
|
| 1014 |
|
| 1015 |
[*Note 2*: The distinction between `invocable` and `regular_invocable`
|
|
@@ -1122,11 +1122,10 @@ Under these conditions, it can be shown that
|
|
| 1122 |
[expr.prim.id]: expr.md#expr.prim.id
|
| 1123 |
[expr.unary.op]: expr.md#expr.unary.op
|
| 1124 |
[forward]: utilities.md#forward
|
| 1125 |
[func.def]: utilities.md#func.def
|
| 1126 |
[func.invoke]: utilities.md#func.invoke
|
| 1127 |
-
[function.objects]: utilities.md#function.objects
|
| 1128 |
[lib.types.movedfrom]: library.md#lib.types.movedfrom
|
| 1129 |
[meta.trans.other]: meta.md#meta.trans.other
|
| 1130 |
[meta.type.synop]: meta.md#meta.type.synop
|
| 1131 |
[over.best.ics]: over.md#over.best.ics
|
| 1132 |
[structure.requirements]: library.md#structure.requirements
|
|
|
|
| 364 |
Let `C` be `common_reference_t<T, U>`. Let `t1` and `t2` be
|
| 365 |
equality-preserving expressions [[concepts.equality]] such that
|
| 366 |
`decltype((t1))` and `decltype((t2))` are each `T`, and let `u1` and
|
| 367 |
`u2` be equality-preserving expressions such that `decltype((u1))` and
|
| 368 |
`decltype((u2))` are each `U`. `T` and `U` model
|
| 369 |
+
`common_reference_with<T, U>` only if
|
| 370 |
|
| 371 |
- `C(t1)` equals `C(t2)` if and only if `t1` equals `t2`, and
|
| 372 |
- `C(u1)` equals `C(u2)` if and only if `u1` equals `u2`.
|
| 373 |
|
| 374 |
[*Note 1*: Users can customize the behavior of `common_reference_with`
|
|
|
|
| 404 |
Let `C` be `common_type_t<T, U>`. Let `t1` and `t2` be
|
| 405 |
equality-preserving expressions [[concepts.equality]] such that
|
| 406 |
`decltype((t1))` and `decltype((t2))` are each `T`, and let `u1` and
|
| 407 |
`u2` be equality-preserving expressions such that `decltype((u1))` and
|
| 408 |
`decltype((u2))` are each `U`. `T` and `U` model `common_with<T, U>`
|
| 409 |
+
only if
|
| 410 |
|
| 411 |
- `C(t1)` equals `C(t2)` if and only if `t1` equals `t2`, and
|
| 412 |
- `C(u1)` equals `C(u2)` if and only if `u1` equals `u2`.
|
| 413 |
|
| 414 |
[*Note 1*: Users can customize the behavior of `common_with` by
|
|
|
|
| 721 |
template<class T>
|
| 722 |
concept boolean-testable-impl = convertible_to<T, bool>; // exposition only
|
| 723 |
```
|
| 724 |
|
| 725 |
Let `e` be an expression such that `decltype((e))` is `T`. `T` models
|
| 726 |
+
`boolean-testable-impl` only if
|
| 727 |
|
| 728 |
- either `remove_cvref_t<T>` is not a class type, or a search for the
|
| 729 |
names `operator&&` and `operator||` in the scope of
|
| 730 |
`remove_cvref_t<T>` finds nothing; and
|
| 731 |
- argument-dependent lookup [[basic.lookup.argdep]] for the names
|
|
|
|
| 820 |
|
| 821 |
Let `C` be `common_reference_t<const T&, const U&>`. Let `t1` and `t2`
|
| 822 |
be equality-preserving expressions that are lvalues of type
|
| 823 |
`remove_cvref_t<T>`, and let `u1` and `u2` be equality-preserving
|
| 824 |
expressions that are lvalues of type `remove_cvref_t<U>`. `T` and `U`
|
| 825 |
+
model `comparison-common-type-with<T, U>` only if
|
| 826 |
|
| 827 |
- `CONVERT_TO_LVALUE<C>(t1)` equals `CONVERT_TO_LVALUE<C>(t2)` if and
|
| 828 |
only if `t1` equals `t2`, and
|
| 829 |
- `CONVERT_TO_LVALUE<C>(u1)` equals `CONVERT_TO_LVALUE<C>(u2)` if and
|
| 830 |
only if `u1` equals `u2`
|
|
|
|
| 972 |
|
| 973 |
## Callable concepts <a id="concepts.callable">[[concepts.callable]]</a>
|
| 974 |
|
| 975 |
### General <a id="concepts.callable.general">[[concepts.callable.general]]</a>
|
| 976 |
|
| 977 |
+
The concepts in [[concepts.callable]] describe the requirements on
|
| 978 |
+
callable types [[func.def]] and their arguments.
|
|
|
|
| 979 |
|
| 980 |
### Concept <a id="concept.invocable">[[concept.invocable]]</a>
|
| 981 |
|
| 982 |
The `invocable` concept specifies a relationship between a callable type
|
| 983 |
[[func.def]] `F` and a set of argument types `Args...` which can be
|
|
|
|
| 1003 |
|
| 1004 |
The `invoke` function call expression shall be
|
| 1005 |
equality-preserving [[concepts.equality]] and shall not modify the
|
| 1006 |
function object or the arguments.
|
| 1007 |
|
| 1008 |
+
[*Note 1*: This requirement supersedes the “not required to be
|
| 1009 |
+
equality-preserving” comment in the definition of
|
| 1010 |
+
`invocable`. — *end note*]
|
| 1011 |
|
| 1012 |
[*Example 1*: A random number generator does not model
|
| 1013 |
`regular_invocable`. — *end example*]
|
| 1014 |
|
| 1015 |
[*Note 2*: The distinction between `invocable` and `regular_invocable`
|
|
|
|
| 1122 |
[expr.prim.id]: expr.md#expr.prim.id
|
| 1123 |
[expr.unary.op]: expr.md#expr.unary.op
|
| 1124 |
[forward]: utilities.md#forward
|
| 1125 |
[func.def]: utilities.md#func.def
|
| 1126 |
[func.invoke]: utilities.md#func.invoke
|
|
|
|
| 1127 |
[lib.types.movedfrom]: library.md#lib.types.movedfrom
|
| 1128 |
[meta.trans.other]: meta.md#meta.trans.other
|
| 1129 |
[meta.type.synop]: meta.md#meta.type.synop
|
| 1130 |
[over.best.ics]: over.md#over.best.ics
|
| 1131 |
[structure.requirements]: library.md#structure.requirements
|