1 // PR c++/90938 - Initializing array with {1} works, but not {0}
2 // { dg-do compile { target c++2a } }
3 // { dg-options "-Wall" }
4 
5 struct A { int i; };
6 struct B { A a[2]; };
7 
8 static const constexpr A a0 = { 0 };
9 static const constexpr A a_ = { };
10 
11 template <B> struct X { };
12 
13 typedef X<B{ }>             XB;
14 typedef X<B{{A{ }}}>        XB;
15 typedef X<B{{A{ 0 }}}>      XB;
16 typedef X<B{{a_}}>          XB;
17 typedef X<B{{a0}}>          XB;
18 typedef X<B{{a_, A{ }}}>    XB;
19 typedef X<B{{a_, A{ 0 }}}>  XB;
20 typedef X<B{{a_, a_}}>      XB;
21 typedef X<B{{a_, a0}}>      XB;
22 
23 
24 struct C { constexpr C () = default; };
25 struct D { C c[2]; };
26 
27 static const constexpr C c_ = { };
28 
29 template <D> struct Y { };
30 
31 typedef Y<D{ }>             YD;
32 typedef Y<D{C { }}>         YD;
33 typedef Y<D{{c_}}>          YD;
34 typedef Y<D{C{ }, C{ }}>    YD;
35 typedef Y<D{C{ }, c_}>      YD;
36 typedef Y<D{{c_, c_}}>      YD;
37