While messing around with the type syntax, I noticed this is legal :

```
typedef int *((* T)[10]);

T fun(){
  return 0;
};

int main(int argc, char * argv[]){
  //int c = fun(); // (1)
  return 0;
}

```

...And if you uncomment `(1)`, then you get an error message of this kind (GCC / Clang) : "`error: cannot initialize a variable of type 'int' with an rvalue of type 'T' (aka 'int *((*)[10])')`" (Normal so far). Notice however the "`aka`" that points out the type is an alias of `int *((*)[10])` and not simply `int ***`

However, It seems impossible to declare a function with this type without using a typedef :

```
int *((*)[10]) fun(){ // The compiler does not approve
  return 0;
};

int *((* fun2)[10]) (){ // The compiler does not approve either
  return 0;
};

int main(int argc, char * argv[]){
  //int c = fun(); // (1)
  return 0;
}

```

...Then I was wondering why ?
(the question is for the C language, but it looks like it's the same for C++)