I think in C++ iostreams, stream manipulators in the style of endl
are more idiomatic:
#include <iostream>
namespace debug
{
std::ostream & info(std::ostream & os) { return os << "Info: "; }
std::ostream & warn(std::ostream & os) { return os << "Warning: "; }
std::ostream & error(std::ostream & os) { return os << "Error: "; }
}
int main()
{
std::cout << debug::info << "This is main()\n"
<< debug::error << "Everything is broken\n";
}