Essentially, expanding a parameter pack E...
produces a list E1, E2, [...], EN
, one E
for each element in the pack. This syntactic construct is only valid in places where lists are grammatically correct, such as in function calls, initializer lists etc. An expression containing multiple comma operators does not count.
I believe that with fold expressions (N4295: Folding expressions (Andrew Sutton, Richard Smith)) you'll be able to simply write:
(print(a), ...);
In this expression,
print(a)
is an expression with an unexpanded parameter pack,
,
is the operator and
...
designates the right fold expansion.
The result of the entire expression is that (print(a), ...)
will be transformed into
print(a1) , (print(a2), (print(a3), print(a4))) // (assuming four elements).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…