这个静态断言是否正常工作?

时间:2012-02-22 13:29:51

标签: c++ static-assert

我最近看到了以下代码:

#define MY_ASSERT_CONCAT_(a, b) a##b
#define MY_ASSERT_CONCAT(a, b) MY_ASSERT_CONCAT_(a, b)
#define MY_STATIC_ASSERT(e,msg) enum { MY_ASSERT_CONCAT(assert_line_,__LINE__) = 1/int(!!(e)) }

它会按预期工作吗(BOOST_STATIC_ASSERT-like)?

1 个答案:

答案 0 :(得分:1)

它会对你有用吗?

#define MY_STATIC_ASSERT(e,msg) \
{   \
        int MY_ASSERT_CONCAT(assert_line_,__LINE__)[!!e]; \
        MY_ASSERT_CONCAT(assert_line_,__LINE__); \
}

它试图声明一个大小为1或0的数组,具体取决于表达式。它只适用于VC,因为GCC允许零大小的数组(默认情况下)。第二种用法只是使用变量,因此编译器不会发出“unused variable”警告。 请注意,反斜杠(\)后没有空格,并且它适用于VC。将其更改为单行宏,或在编译器中使用适当的替代。

我建议改用static_assert,这会产生优雅的错误信息(只有一条错误信息!)。

相关问题