March 05, 2006
Currently, the spec describes ArrayMemberInitialization so:

ArrayMemberInitialization:
	AssignExpression
	AssignExpression : AssignExpression

However, considering the following:

struct test
{
	int i;
}

static test[] tests = [
	{1},
];

Compiles just fine, I believe the spec to be incorrect.  Instead, it might be:

ArrayMemberInitialization:
	AssignExpression
	AssignExpression : AssignExpression
	StructInitializer
	AssignExpression : StructInitializer
	ArrayInitializer
	AssignExpression : ArrayInitializer

That said, this compiles too:

struct test
{
	int[] i;
}

static test tests = {
	[1, 2, 3]
};

So it might seem that StructMemberInitializer would need the reverse change, becoming:

StructMemberInitializer:
	AssignExpression
	Identifier : AssignExpression
	ArrayInitializer
	Identifier : ArrayInitializer
	StructInitializer
	Identifier : StructInitializer

However, this may still not be entirely correct.  Especially if we ever get any form of array literals in non-constant expressions.

Thanks,
-[Unknown]