From Jason Turner

[temp.constr.constr]

Diff to HTML by rtfpessoa

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: calls f(int)
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
- This similarity includes the situation where a program is ill-formed, no
169
- diagnostic required, when the meaning of the program depends on whether
170
- two constructs are equivalent, and they are functionally equivalent but
171
- not equivalent.
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()