繁体   English   中英

使用 static_assert 时 A 和 not A 如何同时为真

[英]How can A and not A be both true when using static_assert

涉及一些 constexpr 和类型特征的非常令人困惑的情况使我认为表达式的值是 true,而实际上它既是 true 又是 false。

https://godbolt.org/z/McYMvxasT


#include <utility>
#include <iostream>

template<typename T>
struct S {

    constexpr int f() const {
        constexpr bool t = std::is_same_v<double, double>;
        static_assert(t);
        static_assert(!t);
        //static_assert(false);

        return 0;
    }

    static const int t = f();
};

int main() {
    //S<int> s;
    //std::cout << S<int>::t;

    return 0;
}

我知道如果 f() 永远不会被实例化,那么 static_asserts 会被跳过,但是这个假设被取消注释行static_assert(false)拒绝了,这确实失败了。 这是编译器错误吗?

没有格式良好的实例化的模板是格式错误的,不需要诊断。 该程序无效,但不需要编译器对其进行诊断。

它不是既对又错:它根本没有被实例化,所以它没有被评估。 如果您取消注释 main 中的两个调用,它将触发错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM