// 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{});