我想使用一些static_assert
检查,条件取决于一些 constexpr 逻辑。我认为这样的事情可能会起作用:
int main(){
constexpr int val = 1;
if constexpr (val == 1){
static_assert(val > 0);
}
if constexpr (val == 2){
static_assert(val > 1);
}
}
因为在编译时应该可以确定只检查第一个断言。但是,我得到:
$ g++ -Wall -std=c++1z main.cpp
main.cpp: In function ‘int main()’:
main.cpp:13:9: error: static assertion failed
static_assert(val > 1);
^~~~~~~~~~~~~
我有点惊讶,我会认为编译器足够聪明,可以在编译时理解第二个 if 不应该被采用。
所以我的问题是,知道如何获得执行这种“constexpr 条件静态断言”的模式吗?
关于我的编译器版本的一些信息,如果这可能有用:
$ g++ --version
g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
PS:当然,这是一个微不足道/荒谬的测试,但我对如何获得这样的模式感兴趣,对于更复杂的情况。