Because of the type relaxation detailed in the first post, this would not make the compiler complain about using struct y * types as struct x * arguments.

Gah, my function is too big for inlining ?

It would IMO be too obscure, to allow extern declarations in the struct. Then the API programmer would either have to know a name shortening scheme, so that he could give the proper function name to the extern function