text: Args> 17 void printf(const char *s, T value, Args... args) 18 { 19 while (*s) { 20 if (*s == '%') { 21 if (*(s + 1) == '%') { 22 ++s; 23 } 24 else { 25 std::cout << value; 26 s += 2; // работает только для спецификаторов формата из двух символов (напр. %d, %f ).Не будет работать с %5.4f 27 printf(s, args...); // вызов происходит даже когда *s == 0, чтобы обнаружить избыточные аргументы 28 return; 29 } 30 } 31 std::cout << *s++; 32 } 33 } Это рекурсивный шаблон.