ns::logger initialized with a list of expressions (print(std::forward<Ts>(ts)), ns::s{}) , one for each element in ts .
Each expression, in turn, uses a comma operator . It calls print(std::forward<Ts>(ts)) and discards its result (if any). Then it creates ns::s{} , and this object becomes the result of the comma operator.
The end result is roughly equivalent to this pseudo-code:
print(std::forward<Ts_1>(ts_1)); print(std::forward<Ts_2>(ts_2)); ... print(std::forward<Ts_N>(ts_N)); ns::logger{ns::s{}, ns::s{}, ... };
source share