I think it shouldn't be the case, because the point of typedefs is that they're supposed to make the underlying type transparent to the client, so you can change the implementation without breaking client code.

Clarification

Basically, lets say we have could have these two options:

class X {...};
typedef X Z; // (1)

OR

class Z {...}; // (2)

I want to be able in client code to do this:

class Z; // Or something of this effect, sadly this fails in the case of (1)

And that code not needing to change no matter whether Z is a typedef or a class (which really should be transparent to the client).

This is unclear. That question was about typedef declarations inside the class, and I would say the solution is to replace or augment the class with a namespace. You cannot forward declare anything as anything else, so a class cannot be forward declared as a typedef. Is that more like what you are asking about?
–
PotatoswatterApr 2 '11 at 4:48

really nice library writers provide the public types and forwards in a separate header for their clients, so the clients never need to manage this manually. clients just include the library's types header. it's also nice so your library headers don't have all the noise of forwards. forwards and typedefs cost 'nothing' at compilation -- just put the public types there.
–
justinApr 2 '11 at 4:56