Index: include/array =================================================================== --- include/array +++ include/array @@ -134,7 +134,12 @@ typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; - value_type __elems_[_Size > 0 ? _Size : 1]; + typedef typename conditional<_Size == 0, + typename aligned_storage::value>::type, + value_type[_Size == 0 ? 1 : _Size] + >::type _StorageType; + + _StorageType __elems_; // No explicit construct/copy/destroy for aggregate type _LIBCPP_INLINE_VISIBILITY void fill(const value_type& __u) Index: test/std/containers/sequences/array/array.cons/default.pass.cpp =================================================================== --- test/std/containers/sequences/array/array.cons/default.pass.cpp +++ test/std/containers/sequences/array/array.cons/default.pass.cpp @@ -14,6 +14,10 @@ #include #include +struct NoDefault { + NoDefault(int) {} +}; + int main() { { @@ -28,4 +32,9 @@ C c; assert(c.size() == 0); } + { + typedef std::array C; + C c; + assert(c.size() == 0); + } }