tmp/tmp60_pffur/{from.md → to.md}
RENAMED
|
@@ -1,7 +1,9 @@
|
|
| 1 |
### Constraints <a id="temp.constr.constr">[[temp.constr.constr]]</a>
|
| 2 |
|
|
|
|
|
|
|
| 3 |
A *constraint* is a sequence of logical operations and operands that
|
| 4 |
specifies requirements on template arguments. The operands of a logical
|
| 5 |
operation are constraints. There are three different kinds of
|
| 6 |
constraints:
|
| 7 |
|
|
@@ -52,11 +54,11 @@ template<typename T>
|
|
| 52 |
requires (sizeof(T) > 1) && (get_value<T>())
|
| 53 |
void f(T); // has associated constraint sizeof(T) > 1 ∧ get_value<T>()
|
| 54 |
|
| 55 |
void f(int);
|
| 56 |
|
| 57 |
-
f('a'); // OK
|
| 58 |
```
|
| 59 |
|
| 60 |
In the satisfaction of the associated constraints [[temp.constr.decl]]
|
| 61 |
of `f`, the constraint `sizeof(char) > 1` is not satisfied; the second
|
| 62 |
operand is not checked for satisfaction.
|
|
@@ -163,14 +165,14 @@ void h() {
|
|
| 163 |
}
|
| 164 |
```
|
| 165 |
|
| 166 |
— *end example*]
|
| 167 |
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
|
| 173 |
[*Example 2*:
|
| 174 |
|
| 175 |
``` cpp
|
| 176 |
template <unsigned N> void f2()
|
|
|
|
| 1 |
### Constraints <a id="temp.constr.constr">[[temp.constr.constr]]</a>
|
| 2 |
|
| 3 |
+
#### General <a id="temp.constr.constr.general">[[temp.constr.constr.general]]</a>
|
| 4 |
+
|
| 5 |
A *constraint* is a sequence of logical operations and operands that
|
| 6 |
specifies requirements on template arguments. The operands of a logical
|
| 7 |
operation are constraints. There are three different kinds of
|
| 8 |
constraints:
|
| 9 |
|
|
|
|
| 54 |
requires (sizeof(T) > 1) && (get_value<T>())
|
| 55 |
void f(T); // has associated constraint sizeof(T) > 1 ∧ get_value<T>()
|
| 56 |
|
| 57 |
void f(int);
|
| 58 |
|
| 59 |
+
f('a'); // OK, calls f(int)
|
| 60 |
```
|
| 61 |
|
| 62 |
In the satisfaction of the associated constraints [[temp.constr.decl]]
|
| 63 |
of `f`, the constraint `sizeof(char) > 1` is not satisfied; the second
|
| 64 |
operand is not checked for satisfaction.
|
|
|
|
| 165 |
}
|
| 166 |
```
|
| 167 |
|
| 168 |
— *end example*]
|
| 169 |
|
| 170 |
+
As specified in [[temp.over.link]], if the validity or meaning of the
|
| 171 |
+
program depends on whether two constructs are equivalent, and they are
|
| 172 |
+
functionally equivalent but not equivalent, the program is ill-formed,
|
| 173 |
+
no diagnostic required.
|
| 174 |
|
| 175 |
[*Example 2*:
|
| 176 |
|
| 177 |
``` cpp
|
| 178 |
template <unsigned N> void f2()
|