Сел почитать 4-е издание Страуструпа и наткнулся на функцию, которую удобно использовать для отладочного вывода, если надоело постоянное << ' ' <<
между переменными в выражениях вроде cerr << variable1 << ' ' << variable2 << ' ' << variable3 << endl;
и хочется немного лучшей читабельности.
Функция принимает любое количество аргументов любого типа, который можно вывести стандартным cerr'ом, выводит их подряд через пробел и затем переходит на новую строку.
void dout() { cerr << endl; }
template <typename Head, typename... Tail>
void dout(Head H, Tail... T) {
cerr << H << ' ';
dout(T...);
}
Пример использования (str == "ololo"):
dout(123,str,4.0);
dout();
dout(1,2);
/* Prints:
123 ololo 4
1 2
*/
То же самое обычным способом:
cerr << 123 << ' ' << str << ' ' << 4.0 << endl;
cerr << endl;
cerr << 1 << ' ' << 2 << endl;