tmp/tmp85v_9aw1/{from.md → to.md}
RENAMED
|
@@ -8,29 +8,29 @@ template<class... B> struct conjunction : see below { };
|
|
| 8 |
```
|
| 9 |
|
| 10 |
The class template `conjunction` forms the logical conjunction of its
|
| 11 |
template type arguments.
|
| 12 |
|
| 13 |
-
For a specialization `conjunction<
|
| 14 |
-
type argument `
|
| 15 |
-
instantiating `conjunction<
|
| 16 |
-
instantiation of `
|
| 17 |
|
| 18 |
[*Note 1*: This is analogous to the short-circuiting behavior of the
|
| 19 |
built-in operator `&&`. — *end note*]
|
| 20 |
|
| 21 |
-
Every template type argument for which `
|
| 22 |
-
be usable as a base class and shall have a member `value` which is
|
| 23 |
convertible to `bool`, is not hidden, and is unambiguously available in
|
| 24 |
the type.
|
| 25 |
|
| 26 |
-
The specialization `conjunction<
|
| 27 |
unambiguous base that is either
|
| 28 |
|
| 29 |
-
- the first type `
|
| 30 |
-
`bool(
|
| 31 |
-
- if there is no such `
|
| 32 |
|
| 33 |
[*Note 2*: This means a specialization of `conjunction` does not
|
| 34 |
necessarily inherit from either `true_type` or
|
| 35 |
`false_type`. — *end note*]
|
| 36 |
|
|
@@ -43,29 +43,29 @@ template<class... B> struct disjunction : see below { };
|
|
| 43 |
```
|
| 44 |
|
| 45 |
The class template `disjunction` forms the logical disjunction of its
|
| 46 |
template type arguments.
|
| 47 |
|
| 48 |
-
For a specialization `disjunction<
|
| 49 |
-
type argument `
|
| 50 |
-
instantiating `disjunction<
|
| 51 |
-
instantiation of `
|
| 52 |
|
| 53 |
[*Note 3*: This is analogous to the short-circuiting behavior of the
|
| 54 |
built-in operator `||`. — *end note*]
|
| 55 |
|
| 56 |
-
Every template type argument for which `
|
| 57 |
-
be usable as a base class and shall have a member `value` which is
|
| 58 |
convertible to `bool`, is not hidden, and is unambiguously available in
|
| 59 |
the type.
|
| 60 |
|
| 61 |
-
The specialization `disjunction<
|
| 62 |
unambiguous base that is either
|
| 63 |
|
| 64 |
-
- the first type `
|
| 65 |
-
`bool(
|
| 66 |
-
- if there is no such `
|
| 67 |
|
| 68 |
[*Note 4*: This means a specialization of `disjunction` does not
|
| 69 |
necessarily inherit from either `true_type` or
|
| 70 |
`false_type`. — *end note*]
|
| 71 |
|
|
@@ -76,8 +76,8 @@ The member names of the base class, other than `disjunction` and
|
|
| 76 |
``` cpp
|
| 77 |
template<class B> struct negation : see below { };
|
| 78 |
```
|
| 79 |
|
| 80 |
The class template `negation` forms the logical negation of its template
|
| 81 |
-
type argument. The type `negation<B>` is a
|
| 82 |
-
characteristic of `bool_constant<!bool(B::value)>`.
|
| 83 |
|
|
|
|
| 8 |
```
|
| 9 |
|
| 10 |
The class template `conjunction` forms the logical conjunction of its
|
| 11 |
template type arguments.
|
| 12 |
|
| 13 |
+
For a specialization `conjunction<``B₁``, `…`, ``B_N``>`, if there is a
|
| 14 |
+
template type argument `Bᵢ` for which `bool(``Bᵢ``::value)` is `false`,
|
| 15 |
+
then instantiating `conjunction<``B₁``, `…`, ``B_N``>::value` does not
|
| 16 |
+
require the instantiation of `Bⱼ``::value` for j > i.
|
| 17 |
|
| 18 |
[*Note 1*: This is analogous to the short-circuiting behavior of the
|
| 19 |
built-in operator `&&`. — *end note*]
|
| 20 |
|
| 21 |
+
Every template type argument for which `Bᵢ``::value` is instantiated
|
| 22 |
+
shall be usable as a base class and shall have a member `value` which is
|
| 23 |
convertible to `bool`, is not hidden, and is unambiguously available in
|
| 24 |
the type.
|
| 25 |
|
| 26 |
+
The specialization `conjunction<``B₁``, `…`, ``B_N``>` has a public and
|
| 27 |
unambiguous base that is either
|
| 28 |
|
| 29 |
+
- the first type `Bᵢ` in the list `true_type, ``B₁``, `…`, ``B_N` for
|
| 30 |
+
which `bool(``Bᵢ``::value)` is `false`, or
|
| 31 |
+
- if there is no such `Bᵢ`, the last type in the list.
|
| 32 |
|
| 33 |
[*Note 2*: This means a specialization of `conjunction` does not
|
| 34 |
necessarily inherit from either `true_type` or
|
| 35 |
`false_type`. — *end note*]
|
| 36 |
|
|
|
|
| 43 |
```
|
| 44 |
|
| 45 |
The class template `disjunction` forms the logical disjunction of its
|
| 46 |
template type arguments.
|
| 47 |
|
| 48 |
+
For a specialization `disjunction<``B₁``, `…`, ``B_N``>`, if there is a
|
| 49 |
+
template type argument `Bᵢ` for which `bool(``Bᵢ``::value)` is `true`,
|
| 50 |
+
then instantiating `disjunction<``B₁``, `…`, ``B_N``>::value` does not
|
| 51 |
+
require the instantiation of `Bⱼ``::value` for j > i.
|
| 52 |
|
| 53 |
[*Note 3*: This is analogous to the short-circuiting behavior of the
|
| 54 |
built-in operator `||`. — *end note*]
|
| 55 |
|
| 56 |
+
Every template type argument for which `Bᵢ``::value` is instantiated
|
| 57 |
+
shall be usable as a base class and shall have a member `value` which is
|
| 58 |
convertible to `bool`, is not hidden, and is unambiguously available in
|
| 59 |
the type.
|
| 60 |
|
| 61 |
+
The specialization `disjunction<``B₁``, `…`, ``B_N``>` has a public and
|
| 62 |
unambiguous base that is either
|
| 63 |
|
| 64 |
+
- the first type `Bᵢ` in the list `false_type, ``B₁``, `…`, ``B_N` for
|
| 65 |
+
which `bool(``Bᵢ``::value)` is `true`, or
|
| 66 |
+
- if there is no such `Bᵢ`, the last type in the list.
|
| 67 |
|
| 68 |
[*Note 4*: This means a specialization of `disjunction` does not
|
| 69 |
necessarily inherit from either `true_type` or
|
| 70 |
`false_type`. — *end note*]
|
| 71 |
|
|
|
|
| 76 |
``` cpp
|
| 77 |
template<class B> struct negation : see below { };
|
| 78 |
```
|
| 79 |
|
| 80 |
The class template `negation` forms the logical negation of its template
|
| 81 |
+
type argument. The type `negation<B>` is a *Cpp17UnaryTypeTrait* with a
|
| 82 |
+
base characteristic of `bool_constant<!bool(B::value)>`.
|
| 83 |
|