#pragma once #include #include #define assert(expr, msg, ...) \ ({ \ if (__unlikely(!(expr))) { \ panic( \ "In function \"%s\" (%s:%u):\n" \ "Assertion \"%s\" failed!\n" msg, \ __FUNCTION__, \ __FILE__, \ __LINE__, \ #expr, \ ##__VA_ARGS__ \ ); \ } \ }) #ifndef NDEBUG #define debug_assert(...) assert(__VA_ARGS__) #else #define debug_assert(...) ((void)0) #endif