From Jason Turner

[temp.constr.fold]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmplh3a_odm/{from.md → to.md} +29 -0
tmp/tmplh3a_odm/{from.md → to.md} RENAMED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Fold expanded constraint <a id="temp.constr.fold">[[temp.constr.fold]]</a>
2
+
3
+ A *fold expanded constraint* is formed from a constraint C and a
4
+ *fold-operator* which can either be `&&` or `||`. A fold expanded
5
+ constraint is a pack expansion [[temp.variadic]]. Let N be the number of
6
+ elements in the pack expansion parameters [[temp.variadic]].
7
+
8
+ A fold expanded constraint whose *fold-operator* is `&&` is satisfied if
9
+ it is a valid pack expansion and if N = 0 or if for each i where
10
+ 0 ≤ i < N in increasing order, C is satisfied when replacing each pack
11
+ expansion parameter with the corresponding iᵗʰ element. No substitution
12
+ takes place for any i greater than the smallest i for which the
13
+ constraint is not satisfied.
14
+
15
+ A fold expanded constraint whose *fold-operator* is `||` is satisfied if
16
+ it is a valid pack expansion, N > 0, and if for i where 0 ≤ i < N in
17
+ increasing order, there is a smallest i for which C is satisfied when
18
+ replacing each pack expansion parameter with the corresponding iᵗʰ
19
+ element. No substitution takes place for any i greater than the smallest
20
+ i for which the constraint is satisfied.
21
+
22
+ [*Note 1*: If the pack expansion expands packs of different size, then
23
+ it is invalid and the fold expanded constraint is not
24
+ satisfied. — *end note*]
25
+
26
+ Two fold expanded constraints are *compatible for subsumption* if their
27
+ respective constraints both contain an equivalent unexpanded pack
28
+ [[temp.over.link]].
29
+