Definitions within Return or Argument Types

In C++, types may not be defined in return or argument types. ISO/ ANSI C allows such definitions. For example, the declarations:

void print(struct X { int i;} x);      // error in C++
enum count{one, two, three} counter(); // error in C++

produce errors in C++, but are valid declarations in ISO/ANSI C.