[timer] progress_timer's dtor - strange behavior

Hi all, I'm just happened to use boost::progress_timer for the first time, and was shocked by strange behavior of the progress_timer dtor: Surprisingly, it puts two newlines in the stream ('\n', then endl). So, I've got question - it is a bug or it is a feature? Using current implementation I just can't get the output look like: the first block took 2.34 s the second block took 5.67 s IMO this's a bug, and it should be fixed. Also I would like to be able to specify that no newlines in dtor are needed at all. This is very useful for stringstreams for example. Here's the fixed progress_timer: class progress_timer : public timer, private noncopyable { public: explicit progress_timer(std::ostream & os = std::cout, bool putnewline = true) : m_os(os), m_putnewline(putnewline) {} ~progress_timer() { try { std::istream::fmtflags old_flags = m_os.setf( std::istream::fixed, std::istream::floatfield ); std::streamsize old_prec = m_os.precision( 2 ); m_os << elapsed() << " s"; if (m_putnewline) m_os << std::endl; m_os.flags( old_flags ); m_os.precision( old_prec ); } catch (...) {} } private: std::ostream & m_os; bool m_putnewline; }; -- Pavel Chikulaev
participants (1)
-
Pavel Chikulaev