1

我想使用一些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:当然,这是一个微不足道/荒谬的测试,但我对如何获得这样的模式感兴趣,对于更复杂的情况。

4

0 回答 0