编译期检测错误(compile-time assertions)

这里依赖于一个事实:声明下标大小为零或负数的数组是非法的。

举个例子

#define STATIC_CHECK(expr)  { char unnamed[(expr) ? 1 : 0]; }

 

这种在编译期检查出错误可以增加程序的健壮性

 

这里设置一个模板的检查方式

template < bool > struct CompileTime;

template <>

struct CompileTime<true> {};

 

#define STATIC_CHECK(expr) (CompileTime <expr> != 0 > ( )

当检查到CompileTime<false>()的时候编译器会出错,因为这个是没有定义的

你可能感兴趣的:(struct,编译器)