From b9de163083dabc32b663f66ece74e25700853bf3 Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Sat, 2 Dec 2023 04:18:58 -0500 Subject: [PATCH] Exception state masking. --- IOStreams/EnableExceptions.h | 38 ++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 IOStreams/EnableExceptions.h diff --git a/IOStreams/EnableExceptions.h b/IOStreams/EnableExceptions.h new file mode 100644 index 0000000..ec03a01 --- /dev/null +++ b/IOStreams/EnableExceptions.h @@ -0,0 +1,38 @@ +static_assert( __cplusplus > 2020'99 ); + +#pragma once + +#include + +namespace Alepha::Hydrogen::IOStreams ::detail:: EnableExceptions_m +{ + inline namespace exports + { + class EnableExceptions; + } + + class exports::EnableExceptions + { + private: + std::ios *ios; + std::ios_base::iostate oldState; + + public: + ~EnableExceptions() + { + ios->exceptions( oldState ); + } + + explicit + EnableExceptions( std::ios &ios ) + : ios( &ios ), oldState( ios.exceptions() ) + { + ios.exceptions( std::ios_base::badbit | std::ios_base::failbit ); + } + }; +} + +namespace Alepha::Hydrogen::IOStreams::inline exports::inline EnableExceptions_m +{ + using namespace detail::EnableExceptions_m::exports; +}