// PR c++/90938 - Initializing array with {1} works, but not {0}
// { dg-do compile { target c++20 } }
// { dg-options "-Wall" }

struct A { int i; };
struct B { A a[2]; };

static const constexpr A a0 = { 0 };
static const constexpr A a_ = { };

template <B> struct X { };

typedef X<B{ }>             XB;
typedef X<B{{A{ }}}>        XB;
typedef X<B{{A{ 0 }}}>      XB;
typedef X<B{{a_}}>          XB;
typedef X<B{{a0}}>          XB;
typedef X<B{{a_, A{ }}}>    XB;
typedef X<B{{a_, A{ 0 }}}>  XB;
typedef X<B{{a_, a_}}>      XB;
typedef X<B{{a_, a0}}>      XB;


struct C { constexpr C () = default; };
struct D { C c[2]; };

static const constexpr C c_ = { };

template <D> struct Y { };

typedef Y<D{ }>             YD;
typedef Y<D{C { }}>         YD;
typedef Y<D{{c_}}>          YD;
typedef Y<D{C{ }, C{ }}>    YD;
typedef Y<D{C{ }, c_}>      YD;
typedef Y<D{{c_, c_}}>      YD;
