See this code snippet:
    const     int i1 = 1;
    constexpr int i2 = 1;
    static_assert(i1 == 1, "const     int is not compile-time const"); // ok
    static_assert(i2 == 1, "constexpr int is not compile-time const"); // ok
    const     double PI1 = 3.0;
    constexpr double PI2 = 3.0;  
    static_assert(PI1 == 3.0, "const     double is not compile-time const");  // error
    static_assert(PI2 == 3.0, "constexpr double is not compile-time const");  // ok
For latest clang-14 and gcc-12, the 3rd static_assert doesn't compile, saying:
read of non-constexpr variable 'PI1' is not allowed in a constant expression
This seems very strange to me: for int type, both const and constexpr compare compiles inside static_assert, but for double type, const cannot compare, but only constexpr passes.
What's the syntax rule behind this error? Thanks.
Aucun commentaire:
Enregistrer un commentaire