https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101486
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note GCC accepts the following while both clang and ICC don't: template <typename T> void f1(const T(*)[10]); template <typename T> void f2(T(*)[]); void bar(int (*ptr)[10]) { f1<int>(ptr); f2<int>(ptr); } So GCC at least is doing the conversion correctly.