We have a class more or less like this: (please bear with me, this is only an approximation.
class A { template <class T> static T determinant4(T matrix[4][4]); template <class T> static T determinant3(T matrix[3][3]); template <class T> static T determinant2(T matrix[2][2]); }; template <class T> T A::determinant3(T matrix[3][3]) { // do stuff } When this header file is included in a cpp file, its compilation with gcc 4.3.1 tells me it can't find the determinant3 method. GCC tells me: common_Math.h:270: error: prototype for T common_Math::determinant3(T (*)[3]) does not match any in class common_Math common_Math.h:179: error: candidate is: template<class T> static T common_Math::determinant3(T (*)[3]) I have had trouble reproducing this example in an isolated environment. What I can tell you thought is that if you modify the array to be only of single dimension, it compiles happily. Also all the methods that are not 3x3 matrices, the 4x4 method for example compiles correctly. For this instance of the compilation, T is of type double. It was compiled on a 32 bit machine. -- Summary: Two dimensional array in template method argument list incorrectly interpreted. Product: gcc Version: 4.3.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: djh at emss dot co dot za http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36852