// // 2.15.variadic.template.param.cpp // chapter 2 language usability // modern cpp tutorial // // created by changkun at changkun.de // #include #include #include // sizeof... template void magic(Ts... args) { std::cout << sizeof...(args) << std::endl; } // 1. recursive parameter unpack template void printf1(T0 value) { std::cout << value << std::endl; } template void printf1(T value, Ts... args) { std::cout << value << std::endl; printf1(args...); } // 2. variadic template parameter unfold template void printf2(T0 t0, T... t) { std::cout << t0 << std::endl; if constexpr (sizeof...(t) > 0) printf2(t...); } // 3. parameter unpack using initializer_list template auto printf3(T value, Ts... args) { std::cout << value << std::endl; (void) std::initializer_list{([&args] { std::cout << args << std::endl; }(), value)...}; } int main() { magic(); magic(1); magic(1,""); printf1(1, 2, "123", 1.1); printf2(1, 2.3, "abc"); printf3(111, 123, "alpha", 1.2); return 0; }