https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94124
--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
This is a bad interaction between sharing a constructor for an array and
stripping trailing zero-initializers, which is why this test works with
{{{1}}}.
While here you can initialize D from {{}}, you can't initialize it from {{0}}.
So when we drop that 0, we suddenly allow both F() overloads, making this
ambiguous.
Slightly tweaked testcase:
template <int N> struct A { typedef int _Type[N]; };
template <int N> struct B { typename A<N>::_Type _M_elems; };
class C { };
struct D {
D(C);
};
struct F {
F(B<2>);
F(D);
};
F fn1() { return {{{0}}}; }