Are there any side effects that I'm missing, causing this method to be inferior to the method std::array uses?
O_o

I only looked at this for like a second, but I believe you break static initialization (the constructor must be called) which the public array gets you.

I can look at it more, but that's probably the biggest "trade".

[Edit]
By the by, `ArrayAssign<Type*, N>::assign' should really be a named function (wrapping interface).
[/Edit]

[Edit]
Also, even though the standard only claims leading underscore followed by an underscore or uppercase letter you should avoid the leading underscore always.

It is as simple as this: some vendors misunderstood what exactly the standard says and so used macros of the form "_$" where "$" is a lowercase letter.
[/Edit]

What *are* the issues with std::initializer_list::size() being constexpr?
You can't calculate the distance using iterators or pointer differencing because they are not compile-time constructs; you'd have to have a construct that works at compile-time.

Basically, you'd have to have `std::initializer_list<type, element_count>'.

Soma