https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105550
--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> --- // PR c++/105550 struct A { const A *p = this; }; struct B { const B *p = this; constexpr operator A() { 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{}); }; constexpr E e{}; constexpr A foo (A a) { return a; } constexpr A bar (A) { return {}; } constexpr A baz() { return {}; } 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? constexpr A a12 = baz (); //static_assert(a11.p == &a11, ""); // bug? //constexpr A a13 = foo (A{}); // error!