1 #pragma once 2 /** 3 * static_assert - check integer constant expression at build time 4 * 5 * static_assert() is a wrapper for the C11 _Static_assert, with a 6 * little macro magic to make the message optional (defaulting to the 7 * stringification of the tested expression). 8 * 9 * Contrary to BUILD_BUG_ON(), static_assert() can be used at global 10 * scope, but requires the expression to be an integer constant 11 * expression (i.e., it is not enough that __builtin_constant_p() is 12 * true for expr). 13 * 14 * Also note that BUILD_BUG_ON() fails the build if the condition is 15 * true, while static_assert() fails the build if the expression is 16 * false. 17 */ 18 #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr) 19 #define __static_assert(expr, msg, ...) _Static_assert(expr, msg) 20