Add __builtion_unreachable to vector::size(), vector::capacity()
[official-gcc.git] / gcc / testsuite / g++.dg / cpp1y / constexpr-incr2.C
blob0d22851e4b20431d246519e459573d31787d8bc6
1 // PR c++/91705 - constexpr evaluation rejects ++/-- on floats.
2 // { dg-do compile { target c++14 } }
4 #define SA(X) static_assert((X),#X)
6 template <class T>
7 constexpr T fn1(T t)
9   return ++t;
12 constexpr float fn2(float t)
14   return ++t;
17 template <class T>
18 constexpr T fn3(T t)
20   return --t;
23 constexpr float fn4(float t)
25   return --t;
28 template <class T>
29 constexpr T fn5(T t)
31   return t++;
34 constexpr float fn6(float t)
36   return t++;
39 template <class T>
40 constexpr T fn7(T t)
42   return t--;
45 constexpr float fn8(float t)
47   return t--;
50 constexpr double r1 = fn1(2.0f);
51 SA(r1 == 3);
52 constexpr double r2 = fn2(2.0f);
53 SA(r2 == 3);
54 constexpr double r3 = fn3(2.0f);
55 SA(r3 == 1);
56 constexpr double r4 = fn4(2.0f);
57 SA(r4 == 1);
59 constexpr double r5 = fn5(2.0f);
60 SA(r5 == 2);
61 constexpr double r6 = fn6(2.0f);
62 SA(r6 == 2);
63 constexpr double r7 = fn7(2.0f);
64 SA(r7 == 2);
65 constexpr double r8 = fn8(2.0f);
66 SA(r8 == 2);