Articles

C++11 static_assert

在C++98中,有两种断言的方式。一种方式是assert运行时断言,另外一种是#error编译时断言。但是这两种方式都不适合在模板中使用,因为模板实例化的时间是在二者之间。为此,C++0x引入了static_assert断言,专门为模板准备的。

例如:

template< typename T >
void f (T t)
{
    static_assert(sizeof(T) == sizeof(int),
        "f<T> requires T as the same size as int.");
}

如果通过 f(10);调用该函数,可以正确编译。如果通过 f(10.5);调用该函数,则编译不过。提示f requires T as the same size as int.