#ifndef LOGGER_LOGGER_H #define LOGGER_LOGGER_H #include #include #include #include #include /* * * Logger class * */ namespace detail { template concept output_policy_c = requires(T t) { t.write('c'); }; } // namespace detail template class Logger { public: Logger(output_policy_t output_policy) : m_output_policy(output_policy) { } template void log(args_t... args) { const auto formatted_msg = format(args...); for (const auto& c : formatted_msg) { m_output_policy.write(c); } } private: output_policy_t& m_output_policy; }; #endif // LOGGER_LOGGER_H