来自Modern C Design的CompileTimeChecker无法按预期工作

我最近开始阅读Andrei Alexandrescu的Modern C Design.阅读Compile-Time Assertions后,我尝试了以下代码:

template<bool> struct CompileTimeChecker
{
    CompileTimeChecker(...){};
};
template<> struct CompileTimeChecker<false>{};

#define STATIC_CHECK(expr, msg) \
{\
    class ERROR_##msg{}; \
    (void)sizeof(CompileTimeChecker<(expr)!=0>((ERROR_##msg())));   /*Line 1*/ }


int main()
{
    STATIC_CHECK(sizeof(char)>sizeof(int),TypeTooNarrow); /*Line 2*/

    STATIC_CHECK(sizeof(char)<sizeof(int),TypeTooNarrow); /*Line 3*/
}

由于第2行,代码不应该编译,但它编译得很好.如果我将第1行更改为

(void)(CompileTimeChecker<(expr)!=0>((ERROR_##msg())));   /*Line 1*/ }

要么

new CompileTimeChecker<(expr)!=0>((ERROR_##msg()));   /* Line 1*/ }

它按预期工作.我不明白.

最佳答案 从
Loki library开始尝试
updated version.

点赞