Index: platform/assert.h |
=================================================================== |
--- platform/assert.h (revision 10127) |
+++ platform/assert.h (working copy) |
@@ -268,6 +268,29 @@ |
#define DEBUG_ASSERT(cond) |
+// The COMPILE_ASSERT macro can be used to verify that a compile time |
+// expression is true. For example, you could use it to verify the |
+// size of a static array: |
+// |
+// COMPILE_ASSERT(ARRAYSIZE(content_type_names) == CONTENT_NUM_TYPES, |
+// content_type_names_incorrect_size); |
+// |
+// or to make sure a struct is smaller than a certain size: |
+// |
+// COMPILE_ASSERT(sizeof(foo) < 128, foo_too_large); |
+// |
+// The second argument to the macro is the name of the variable. If |
+// the expression is false, most compilers will issue a warning/error |
+// containing the name of the variable. |
+ |
+template <bool> |
+struct CompileAssert { |
+}; |
+ |
+#define COMPILE_ASSERT(expr, msg) \ |
+ typedef CompileAssert<(static_cast<bool>(expr))> \ |
+ msg[static_cast<bool>(expr) ? 1 : -1] |
+ |
#endif // if defined(DEBUG) |