The code: #include <iostream> template<typename T> struct foo { static const int i = 0; }; template<> template<typename U> struct foo<U[]> { static const int i = 1; };
int main() { int v[5]; std::cerr << foo<int[5]>::i << ":" << foo<int[]>::i << "\n"; return 0; } prints: 0:1 which shows that int[5] is not caught by a T[] specialization. This may be the standard, but I'm not sure and submit it anyway in case it's a bug. -- Summary: template T[] doesn't catch T[5] Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: igodard at pacbell dot net http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30836