I'm with helios on this one. I've found that when I'm nesting a class that is anything but simple, I'm usually doing something wrong and need to rethink the structure of my program.
The same result could be achieved by use of friend class declaration. So there is little actual use of nesting classes. And I think they looks a little messy.
Nested classes are used to encapsulate pure implementation-support types. This is relatively unimportant in amateur software; in a large production code base, proliferation of unencapsulated implementation types is something one would want to avoid. The classic example being the fully insulated concrete class idiom.
If a pure implementation-support-type is not a nested non-public type, it should be placed in a nested namespace with a tell-tale name mandated by the style-guide.
This is obviously even more important for types which are compile-time polymorphic (or where inline access from client code is required for performance reasons); ie. where a compilation firewall is (as in the fully insulated concrete class) not a possibility.