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!

Reply via email to