关于 c:我如何测试静态断言确实断言”假”?

How do I test that static assert does indeed assert for "false"?

假设我有一个自定义的静态断言实现(因为我需要针对没有内置 static_assert 的编译器)。我想制作一个测试来检查

1
MY_STATIC_ASSERT(false);

确实断言。如果我只是编写这样的代码 - 它不会编译(因此不会运行)。我宁愿有一些代码在上面的代码失败时编译得很好,而在上面的代码编译时编译失败。

这可能吗?我可以在编译时(或至少在运行时)检查我的静态断言是否确实为"假"断言?


当然,您可以进行"编译时"检查——只要您完全在编译其他东西:

1
2
3
4
5
6
7
8
9
10
11
12
// test_my_static_assert.cpp

#include"my_static_assert.h"

int main() {
    MY_STATIC_ASSERT(false);
}

// compile.sh
if g++ test_my_static_assert.cpp; then
    echo"MY_STATIC_ASSERT failed! Compile succeeded!"
fi

什么的。但它必须完全在一个单独的程序中。