#ifndef VTR_OSTREAM_GUARD_H #define VTR_OSTREAM_GUARD_H namespace vtr { //A RAII guard class to ensure restoration of output stream format class OsFormatGuard { public: explicit OsFormatGuard(std::ostream& os) : os_(os) , flags_(os_.flags()) //Save formatting flag state , width_(os_.width()) , precision_(os.precision()) , fill_(os.fill()) {} ~OsFormatGuard() { os_.flags(flags_); //Restore os_.width(width_); os_.precision(precision_); os_.fill(fill_); } OsFormatGuard(const OsFormatGuard&) = delete; OsFormatGuard& operator=(const OsFormatGuard&) = delete; OsFormatGuard(const OsFormatGuard&&) = delete; OsFormatGuard& operator=(const OsFormatGuard&&) = delete; private: std::ostream& os_; std::ios::fmtflags flags_; std::streamsize width_; std::streamsize precision_; char fill_; }; } // namespace vtr #endif