我正在从谷歌的 cpp-btree 库(https://code.google.com/p/cpp-btree/)中读取代码,并且遇到了编译时断言机制。
// A compile-time assertion.
template <bool>
struct CompileAssert {
};
#define COMPILE_ASSERT(expr, msg) \
typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
所以我或多或少地了解它的作用,如果 expr 被编译器评估为 false,它将声明一个新类型 msg,它将是一个大小为 -1 的 CompileAssert < false > 数组,这将触发编译错误。
我没有得到 bool(expr) 部分,这到底是什么?对类 bool 的复制构造函数的某种调用?(但它是一个内置类型,所以我很困惑)我虽然这将是一种在 expr 不是布尔值时引发编译错误的机制,但实际上我设法在该行编译了一个短程序
COMPILE_ASSERT("trash",error_compilation_assert);
它用 gcc 3.4 编译得很好
那么任何人都可以解释机制的 bool(expr) 部分吗?