 <p>"std::array wants to behave like a c-array" is not how the standard describes behavior. It's a user-defined type, and members of user-defined types are initialized by calling their constructor, i.e. <code>array&lt;int,10&gt;::array()</code></p>