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