我最近开始阅读Andrei Alexandrescu撰写的Modern C++ Design。阅读编译时断言后,我尝试了以下代码:template 结构体CompileTimeChecker{ CompileTimeChecker(...){};};template struct CompileTimeChecker {};#定义STATIC_CHECK(expr,msg)\{\ ERROR _ ## msg {}类;\ (void)sizeof(CompileTimeChecker (((ERROR _ ## msg()))));/*第1行*/}int main(){ STATIC_CHECK(sizeof(char)> sizeof(int),TypeTooNarrow);/*第2行*/ STATIC_CHECK(sizeof(char)}由于第2行,该代码不应编译,但可以正常编译。如果我将第1行更改为(void)(CompileTimeChecker (((ERROR _ ## msg()))));/*第1行*/}或者新的CompileTimeChecker (((ERROR _ ## msg())));/*第1行*/}它按预期工作。我不明白 最佳答案 尝试从updated version中的Loki library。关于c++ - Modern C++ Design的CompileTimeChecker无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3934664/
10-13 06:49