#pragma once #if !defined(MIJIN_INTERNAL_EXCEPTION_HPP_INCLUDED) #define MIJIN_INTERNAL_EXCEPTION_HPP_INCLUDED 1 #if !defined(MIJIN_ENABLE_EXCEPTIONS) # define MIJIN_ENABLE_EXCEPTIONS (__cpp_exceptions) #endif #define MIJIN_CATCH_EXCEPTIONS (__cpp_exceptions) #if !defined(MIJIN_THROWING_ASSERTS) # define MIJIN_THROWING_ASSERTS 0 #endif #if MIJIN_THROWING_ASSERTS && !defined(MIJIN_TEST_NO_NOEXCEPT) #define MIJIN_TEST_NO_NOEXCEPT #endif #if 0 // TODO: what? MIJIN_WITH_EXCEPTIONS #error "Maybe someday" #else #if defined(MIJIN_TEST_NO_NOEXCEPT) // only use for testing #define MIJIN_NOEXCEPT #define MIJIN_THROWS #define MIJIN_CONDITIONAL_NOEXCEPT(...) #else #define MIJIN_NOEXCEPT noexcept #define MIJIN_THROWS noexcept #define MIJIN_CONDITIONAL_NOEXCEPT(...) noexcept(__VA_ARGS__) #endif #endif #if MIJIN_CATCH_EXCEPTIONS # define MIJIN_TRY try # define MIJIN_CATCH catch #else # define MIJIN_TRY # define MIJIN_CATCH(...) if constexpr(false) #endif #endif // !defined(MIJIN_INTERNAL_EXCEPTION_HPP_INCLUDED)