| /* |
| Copyright 2019-2020 Glen Joseph Fernandes |
| (glenjofe@gmail.com) |
| |
| Distributed under the Boost Software License, Version 1.0. |
| (http://www.boost.org/LICENSE_1_0.txt) |
| */ |
| #ifndef BOOST_IO_DETAIL_OSTREAM_GUARD_HPP |
| #define BOOST_IO_DETAIL_OSTREAM_GUARD_HPP |
| |
| #include <boost/config.hpp> |
| #include <iosfwd> |
| |
| namespace boost { |
| namespace io { |
| namespace detail { |
| |
| template<class Char, class Traits> |
| class ostream_guard { |
| public: |
| explicit ostream_guard(std::basic_ostream<Char, Traits>& os) BOOST_NOEXCEPT |
| : os_(&os) { } |
| |
| ~ostream_guard() BOOST_NOEXCEPT_IF(false) { |
| if (os_) { |
| os_->setstate(std::basic_ostream<Char, Traits>::badbit); |
| } |
| } |
| |
| void release() BOOST_NOEXCEPT { |
| os_ = 0; |
| } |
| |
| private: |
| ostream_guard(const ostream_guard&); |
| ostream_guard& operator=(const ostream_guard&); |
| |
| std::basic_ostream<Char, Traits>* os_; |
| }; |
| |
| } /* detail */ |
| } /* io */ |
| } /* boost */ |
| |
| #endif |