#pragma once #include #include #include template void print(std::ostream& out, const T& x) { out << x; } template<> void print(std::ostream& out, const bool& x) { out << (x ? "true" : "false"); } template<> void print(std::ostream& out, const char& x ) { if ( 0x20 <= x && x <= 0x7E ) { out << "'" << x << "'"; } else { out << "'\\" << std::hex << (unsigned int)x << std::setbase(0) << "'"; } } template std::ostream& operator<< (std::ostream& out, const std::pair& x) { out << "["; print(out, x.first); out << ", "; print(out, x.second); return out << "]"; } template void print(std::ostream& out, const T& arg, const Args&... rest) { out << arg; print(out, rest...); }