http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53248
--- Comment #3 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2012-05-06 11:21:47 UTC --- (In reply to comment #2) > Daniel, can you see other options besides adding a specialization? (which > would > be a straightforward task, I may even get around to do pretty soon when I will > do debug-mode std::array, already in my todo list) I haven't implemented it completely, but an alternative to a partial specialization could be something like the following: template <class T, size_t N> struct __array_data_traits { typedef T type[N]; }; template <class T> struct __array_data_traits<T, 0> { struct type {}; }; template <class T, size_t N> struct array { typename __array_data_traits<T, N>::type elems; }; array<int, 1> ai1 = {1}; array<int, 1> ai1b = {}; array<int, 0> ai0 = {}; The sole (?) disadvantage of this approach would be that std::is_empty<array<int, 0>> does not evaluate to true. But all the specialization-relevant logic could also be added to __array_data_traits in terms of static (constexpr where possible) functions. Technically the traits-based approach would be preferable, because otherwise I see the risk that user-code that itself would try to specialize std::array with some T for a user-provided type could notice the difference. Consider: // Within Library: template <class T, size_t N> struct array { T elems[N]; }; template <class T> struct array<T, 0> { }; // User world: struct User {}; template <size_t N> struct array<User, N> { User elems[N > 0 ? N : 1]; }; array<User, 0> au0 = {}; // Error, ambiguous The problem with the current library wording is that it does not *explicitly* allow a *specialization* for std::array (in contrast to vector<bool> or to numeric_limits for cv-variations of the actual type), therefore I believe that from the current wording state a partial-specialization by the library is borderline to invalid, at least a gray zone, because of the need to support [namespace.std] p1. If a library issue should be submitted, I would suggest to provide the library the freedom for providing a special for the zero-size case.