【发布时间】:2013-05-08 09:45:00
【问题描述】:
我正在阅读编译时断言,在网上搜索后我得到了一些我不明白的代码。
template <bool> struct CompileAssert {};
#define COMPILE_ASSERT(expr, msg) \
typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
如下使用了这个 COMPILE_ASSERT。
COMPILE_ASSERT(!sizeof(T*), PassRefPtr_should_never_be_assigned_to)
但我没有得到这个想法。有人可以帮助我理解上面的代码。 第二对这段代码感到困惑
typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
#define 会将 COMPILE_ASSERT(expr, msg) 替换为上述表达式。但是如何 msg[bool(expr) ? 1 : -1] CompileAssert 的替代类型。
请有人详细而简单地解释一下。我有很多很多问题。
就像为什么 message(PassRefPtr_should_never_be_assigned_to) 不使用 "" 作为 char * 的原因
【问题讨论】: