Tatsächlich ist es in C ++ illegal, einen Typ in einem Parameter oder Rückgabetyp zu definieren, mit oder ohne Namen. Siehe C ++ 11 [diff.decl]:
Änderung: In C ++ dürfen Typen nicht in Rückgabe- oder Parametertypen definiert werden. In C sind diese Typdefinitionen erlaubt
Das eigentliche Problem ist also, dass der erste Fall akzeptiert wird, nicht der zweite, der abgelehnt wird.
Tags und Links c++ c++11 visual-c++ compiler-errors trailing-return-type