9#ifndef AVARA3D_ASSERT_H
10#define AVARA3D_ASSERT_H
17#if defined(__clang__) || defined(__GNUC__)
18 #define A3D_LIKELY(x) __builtin_expect(!!(x), 1)
19 #define A3D_UNLIKELY(x) __builtin_expect(!!(x), 0)
21 #define A3D_LIKELY(x) (x)
22 #define A3D_UNLIKELY(x) (x)
36namespace a3d::detail {
38[[noreturn]]
void assert_fail(
const char* expr,
const char* file,
int line,
const char* func);
40[[noreturn]]
void assert_fail_msg(
const char* expr,
53 #define A3D_ASSERT(expr) \
55 if (A3D_UNLIKELY(!(expr))) { \
56 ::a3d::detail::assert_fail(#expr, __FILE__, __LINE__, __func__); \
62 #define A3D_ASSERT_MSG(expr, msg) \
64 if (A3D_UNLIKELY(!(expr))) { \
65 ::a3d::detail::assert_fail_msg(#expr, __FILE__, __LINE__, __func__, (msg)); \
71 #define A3D_ASSERT(expr) \
73 (void) sizeof(expr); \
75 #define A3D_ASSERT_MSG(expr, msg) \
77 (void) sizeof(expr); \