[expr.prim.fold] (original) (raw)

7 Expressions [expr]

7.5 Primary expressions [expr.prim]

7.5.6 Fold expressions [expr.prim.fold]

An expression of the form(... op e)where op is a fold-operatoris called a unary left fold.

An expression of the form(e op ...)where op is a fold-operatoris called a unary right fold.

Unary left folds and unary right folds are collectively called unary folds.

An expression of the form(e1 op1 ... op2 e2)where op1 and op2 are fold-operatorsis called a binary fold.

In a binary fold,op1 and op2shall be the same fold-operator, and either e1shall contain an unexpanded pack or e2shall contain an unexpanded pack, but not both.

If e2 contains an unexpanded pack, the expression is called a binary left fold.

If e1 contains an unexpanded pack, the expression is called a binary right fold.

[ Example

:

template<typename ...Args> bool f(Args ...args) { return (true && ... && args); // OK }

template<typename ...Args> bool f(Args ...args) { return (args + ... + args); // error: both operands contain unexpanded packs }

end example

]