#pragma once #include #include namespace stdx { inline namespace v1 { struct default_panic_handler { template static auto panic(Args &&...) noexcept -> void {} #if __cplusplus >= 202002L template static auto panic(Args &&...) noexcept -> void {} #endif }; template inline auto panic_handler = default_panic_handler{}; template auto panic(Args &&...args) -> void { panic_handler.panic(std::forward(args)...); } #if __cplusplus >= 202002L template auto panic(Args &&...args) -> void { panic_handler.template panic(std::forward(args)...); } #endif } // namespace v1 } // namespace stdx // NOLINTBEGIN(cppcoreguidelines-macro-usage) #if __cplusplus >= 202002L #define STDX_PANIC(MSG, ...) \ [] { \ using stdx::ct_string_literals::operator""_cts; \ stdx::panic(__VA_ARGS__); \ }() #else #define STDX_PANIC(...) stdx::panic(__VA_ARGS__) #endif // NOLINTEND(cppcoreguidelines-macro-usage)