I understand from the answer to the question Forward declare a class's public typedef in c++, forward declaring something which may be typedef is impossible in C++.
Is it possible to do what this question asks in C++0x?
Otherwise, making changes like:
class X {...};
typedef X Z;
to
class Y {...};
typedef Y Z;
breaks client code.
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).