// PR c++/91705 - constexpr evaluation rejects ++/-- on floats. // { dg-do compile { target c++14 } } #define SA(X) static_assert((X),#X) template constexpr T fn1(T t) { return ++t; } constexpr float fn2(float t) { return ++t; } template constexpr T fn3(T t) { return --t; } constexpr float fn4(float t) { return --t; } template constexpr T fn5(T t) { return t++; } constexpr float fn6(float t) { return t++; } template constexpr T fn7(T t) { return t--; } constexpr float fn8(float t) { return t--; } constexpr double r1 = fn1(2.0f); SA(r1 == 3); constexpr double r2 = fn2(2.0f); SA(r2 == 3); constexpr double r3 = fn3(2.0f); SA(r3 == 1); constexpr double r4 = fn4(2.0f); SA(r4 == 1); constexpr double r5 = fn5(2.0f); SA(r5 == 2); constexpr double r6 = fn6(2.0f); SA(r6 == 2); constexpr double r7 = fn7(2.0f); SA(r7 == 2); constexpr double r8 = fn8(2.0f); SA(r8 == 2);