#pragma once #if !defined(MIJIN_INTERNAL_EXCEPTION_HPP_INCLUDED) #define MIJIN_INTERNAL_EXCEPTION_HPP_INCLUDED 1 #if !defined(MIJIN_WITH_EXCEPTIONS) #define MIJIN_WITH_EXCEPTIONS 0 #endif #if 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 #define MIJIN_EXCEPT_CHOOSE(noexceptType, exceptType) noexceptType #define MIJIN_THROW_OR_RETURN(value, exception) return (value) #define MIJIN_RETURN_SUCCESS(value) return (value) #endif #define MIJIN_ERROR_BOOL MIJIN_EXCEPT_CHOOSE([[nodiscard]] bool, void) #define MIJIN_THROW_OR_RETURN_STD(value, message) MIJIN_THROW_OR_RETURN(value, std::runtime_error(message)) #endif // !defined(MIJIN_INTERNAL_EXCEPTION_HPP_INCLUDED)