/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright 2021, Danny Robson */ /////////////////////////////////////////////////////////////////////////////// namespace cruft::debug::fpe { void enable (void); void disable (void); bool value (void); bool value (bool); /// Returns the FPE state to the value it was at construction time when the object falls out of scope. /// /// Copy and move constructors are deliberately deleted to avoid accidentally leaking state. class scoped_reset { public: /// An explict enablement state to enact at construction. scoped_reset (bool enabled); /// Caches the current state without changing anything. scoped_reset (); scoped_reset (scoped_reset const&) = delete; scoped_reset& operator= (scoped_reset const&) = delete; scoped_reset (scoped_reset &&) noexcept = delete; scoped_reset& operator= (scoped_reset &&) noexcept = delete; ~scoped_reset (); private: bool m_prev; }; }