GCC now compiles AND evaluates constexpr during compilation.

This commit is contained in:
Camille Monière 2022-02-14 12:13:43 +01:00
parent 9e21f49577
commit e3f9a2e1e5
Signed by: moniere
GPG key ID: 188DD5B072181C0F
2 changed files with 6 additions and 5 deletions

View file

@ -25,7 +25,7 @@ class CCordicRotateRomHalfPi {
static_assert(TNStages > 1, "2 stages of CORDIC is the minimum.");
public:
static constexpr const CRomGeneratorConst<TIn_W, TNStages, Tq> & rom_cordic = CRomGeneratorConst<TIn_W, TNStages, Tq>();
static constexpr const CRomGeneratorConst<TIn_W, TNStages, Tq> & rom_cordic{};
static constexpr unsigned In_W = TIn_W;
static constexpr unsigned In_I = TIn_I;

View file

@ -317,9 +317,10 @@ TEST_CASE("ROM-based Cordic constexpr are evaluated during compilation.", "[CORD
double results_re[n_lines];
double results_im[n_lines];
constexpr complex<int64_t> res = cordic.cordic(value_in, angle);
static_assert(res == cordic.cordic(value_in, angle), "Test");
REQUIRE_FALSE(res == cordic.cordic(complex<int64_t>(1, 0), angle));
REQUIRE(res == cordic.cordic(value_in, angle));
constexpr complex<int64_t> res1 = cordic.cordic(value_in, angle);
constexpr complex<int64_t> res2 = cordic.cordic(value_in, angle);
static_assert(res1 == res2, "Test");
REQUIRE_FALSE(res1 == cordic.cordic(complex<int64_t>(1, 0), angle));
REQUIRE(res1 == cordic.cordic(value_in, angle));
}
}