blob: b225ae29cdef287222b84d30697061986bb36cc1 [file] [log] [blame]
// PR c++/105550
// { dg-do compile { target c++14 } }
struct A {
const A *p = this;
};
struct B {
const B *p = this;
constexpr operator A() const { return {}; }
};
constexpr A
bar (A)
{
return {};
}
constexpr A baz() { return {}; }
struct E {
A a1 = true ? A{} : A{};
A a2 = true ? A{} : B{};
A a3 = false ? A{} : B{};
A a4 = false ? B{} : B{};
A a5 = A{};
A a6 = B{};
A a7 = false ? B{} : (true ? A{} : A{});
A a8 = false ? (true ? A{} : B{}) : (true ? A{} : A{});
A a9 = (A{});
A a10 = (true, A{});
A a11 = bar (A{});
A a12 = baz ();
A a13 = (A{}, A{});
};
constexpr E e{};
constexpr A a1 = true ? A{} : A{};
constexpr A a2 = true ? A{} : B{};
constexpr A a3 = false ? A{} : B{};
constexpr A a4 = false ? B{} : B{};
constexpr A a5 = A{};
constexpr A a6 = B{};
constexpr A a7 = false ? B{} : (true ? A{} : A{});
constexpr A a8 = false ? (true ? A{} : B{}) : (true ? A{} : A{});
constexpr A a9 = (A{});
constexpr A a10 = (true, A{});
constexpr A a11 = bar (A{});
//static_assert(a10.p == &a10, ""); // bug, 105619
constexpr A a12 = baz ();
//static_assert(a11.p == &a11, ""); // bug, 105619
constexpr A a13 = (A{}, A{});