Proposed resolution (February, 2010):
Add the following as a new paragraph following 13.7.2.5 [temp.static] paragraph 1:
An explicit specialization of a static data member declared as an array of unknown bound can have a different bound from its definition, if any. [Example:
template<class T> struct A { static int i[]; }; template<class T> int A<T>::i[4]; // 4 elements template<> int A<int>::i[] = { 1 }; // 1 element, OK—end example]
Change 13.8.3.3 [temp.dep.expr] paragraph 3 as follows:
An id-expression is type-dependent if it contains
:
an identifier that was declared with a dependent type,
a template-id that is dependent,
a conversion-function-id that specifies a dependent type, or
a nested-name-specifier or a qualified-id that names a member of an unknown specialization
.;or if it names a static data member of the current instantiation that has type “array of unknown bound of T” for some T (13.7.2.5 [temp.static]). Expressions of the following forms are type-dependent only if...