void f( const char *p )
{
  std::cout << "pointer" << std::endl;
}
template< unsigned N >
void f( const char (&x)[N] )
{
  std::cout << "template array " << N << std::endl;
}
int main()
{
  const char x[] = "array?";
  f( x );
  f( &x[0] );
  return 0;
}

・・・template バージョンが呼ばれないです。(cygwin g++)
なんで?