#pragma once #include #include #include #include #include #define NOUTT2_DEBUG #ifdef UTT2_DEBUG class WinConsoleW { private: static std::wofstream m_woutstream; WinConsoleW(); static std::once_flag m_createonceflag; static std::unique_ptr m_pInstance; WinConsoleW(const WinConsoleW&) = delete; WinConsoleW(WinConsoleW&&) = delete; WinConsoleW& operator=(const WinConsoleW&) = delete; WinConsoleW& operator=(WinConsoleW&&) = delete; public: ~WinConsoleW(); static WinConsoleW& Console(); void print() { std::wcout << std::endl; } template void print(const T& t) { std::wcout << t << std::endl; } template void print(const First& first, const Rest&... rest) { std::wcout << first; print(rest...); // recursive call using pack expansion syntax } }; #endif #ifdef UTT2_DEBUG #define WCWOUT WinConsoleW::Console().print #else #define WCWOUT //WinConsoleW::Console().print #endif