// PR c++/100252
// { dg-do compile { target c++14 } }

struct B { };

struct A {
  int x;
  int y = x;
  constexpr operator B() { return B{}; }
};

struct C {
  int x = 42;
  B b = A{x};
};

C c1 = {};
C c2 = { 42 };
constexpr C c3 = {};
constexpr C c4 = { 42 };

struct D {
  int x = 42;
  B b = (true, A{x});
};

D d1 = {};
D d2 = { 42 };
constexpr D d3 = {};
constexpr D d4 = { 42 };

struct E {
  int x = 42;
  B b = (A{x});
};

E e1 = {};
E e2 = { 42 };
constexpr E e3 = {};
constexpr E e4 = { 42 };

struct F {
  int x = 42;
  B b = (A{x});
};

F f1 = {};
F f2 = { 42 };
constexpr F f3 = {};
constexpr F f4 = { 42 };

void
g (C c5 = C{}, C c6 = C{ 42 }, D d5 = D{}, D d6 = D{ 42 },
   E e5 = E{}, E e6 = E{ 42 }, F f5 = F{}, F f6 = F{ 42 })
{
}