#pragma once #include #include namespace c11log { class log_exception :public std::exception { public: log_exception() : _oss(), _msg() {} virtual ~log_exception() {} explicit log_exception(const std::string& msg) :_oss(msg, std::ostringstream::ate), _msg(msg) {} log_exception(const log_exception &other) :_oss(other._oss.str()), _msg(other._msg) {} log_exception& operator=(const log_exception& other) { _oss.str(other._oss.str()); _msg = other._msg; return *this; } virtual const char* what() const throw () override { return _msg.c_str(); } template log_exception& operator<<(const T& what) { _oss << what; _msg = _oss.str(); return *this; } private: std::ostringstream _oss; std::string _msg; }; }