c++: robustify testcase [PR109752]
[official-gcc.git] / gcc / testsuite / g++.dg / cpp1y / constexpr-elision1.C
blobb225ae29cdef287222b84d30697061986bb36cc1
1 // PR c++/105550
2 // { dg-do compile { target c++14 } }
4 struct A {
5   const A *p = this;
6 };
8 struct B {
9   const B *p = this;
10   constexpr operator A() const { return {}; }
13 constexpr A
14 bar (A)
16   return {};
19 constexpr A baz() { return {}; }
21 struct E {
22   A a1 = true ? A{} : A{};
23   A a2 = true ? A{} : B{};
24   A a3 = false ? A{} : B{};
25   A a4 = false ? B{} : B{};
26   A a5 = A{};
27   A a6 = B{};
28   A a7 = false ? B{} : (true ? A{} : A{});
29   A a8 = false ? (true ? A{} : B{}) : (true ? A{} : A{});
30   A a9 = (A{});
31   A a10 = (true, A{});
32   A a11 = bar (A{});
33   A a12 = baz ();
34   A a13 = (A{}, A{});
37 constexpr E e{};
39 constexpr A a1 = true ? A{} : A{};
40 constexpr A a2 = true ? A{} : B{};
41 constexpr A a3 = false ? A{} : B{};
42 constexpr A a4 = false ? B{} : B{};
43 constexpr A a5 = A{};
44 constexpr A a6 = B{};
45 constexpr A a7 = false ? B{} : (true ? A{} : A{});
46 constexpr A a8 = false ? (true ? A{} : B{}) : (true ? A{} : A{});
47 constexpr A a9 = (A{});
48 constexpr A a10 = (true, A{});
49 constexpr A a11 = bar (A{});
50 //static_assert(a10.p == &a10, ""); // bug, 105619
51 constexpr A a12 = baz ();
52 //static_assert(a11.p == &a11, ""); // bug, 105619
53 constexpr A a13 = (A{}, A{});