boost_static_assert是一个宏,如果其参数为false,则会导致一个编译期错误。双括号是必要的,因为c++预处理器不能解析模板:如果不多加一对括号,那么它会将隔开模板参数的逗号当成隔开宏参数的逗号,从而将条件表达式错误地解析为若干宏参数。这和运行期的assert(...)不一样(后者是由c++编译期解析的,可以识别一切表达式——译注),boost_static_assert也可以用于类的定义域中,从而允许我们将其置于元函数中。第8章对此有更深入的讨论。
boost_static_assert是一个宏,如果其参数为false,则会导致一个编译期错误。双括号是必要的,因为c++预处理器不能解析模板:如果不多加一对括号,那么它会将隔开模板参数的逗号当成隔开宏参数的逗号,从而将条件表达式错误地解析为若干宏参数。这和运行期的assert(...)不一样(后者是由c++编译期解析的,可以识别一切表达式——译注),boost_static_assert也可以用于类的定义域中,从而允许我们将其置于元函数中。第8章对此有更深入的讨论。