C++编译时断言

C++自 C++11 起支持 static_assert 编译时断言,如:

1
2
static_assert ( bool_constexpr , message )		(C++11 起)
static_assert ( bool_constexpr ) (C++17 起)

如果编译器不支持 C++11(经测试 VS2010 已经支持static_assert),我们可以使用下面方式来实现编译断言:

1
#define COMPILE_ASSERT(expression) switch (0) {case 0: case expression:;}

使用方法:

1
COMPILE_ASSERT(1 != 1);

上述方式虽然能实现编译断言,但缺点也很明显:

  • 错误提示信息的可读性较差;
  • 表达式必须是一个编译期常量表达式;
  • 无法使用在模板元编程中。

强烈建议拥抱新标准,使用 static_assert,做一个开心的人!