pasando la matriz typedef (tamaño fijo) por valor

Estoy teniendo dificultades para entendertypedef patrón para matrices.

typedef char Char10[10];
void fun (Char10 a)  // not passing reference (interested in pass by value)
{
  if(typeid(Char10) == typeid(char*))
    throw 0;  // <--- never happens
}

int main ()
{
  char a[10];  fun(a);  // ok
  char b[11];  fun(b);  // why works ?
}

Por qué los diferentes tamaños de matriz por valor son aceptados porfun()? Sonchar[10] ychar[11] no tipos diferentes?

Edita: Para aquellos que dicen que decae al puntero, vea mi código editado. @char[10] ychar* no parece coincidir.

Respuestas a la pregunta(8)

Su respuesta a la pregunta