This is quite rare in C ++, but common in C (where it's struct Foonot just an alias Foo.) You can see it in a library that has different classes for different platforms (for example, the Canvas class, which is very implementation specific.) The library will use typedefto allow its users to simplify their code:
#if WINDOWS
typedef class WindowsCanvas {
private: HWND handle;
} Canvas;
#elif MAC
typedef class MacCanvas {
private: CGContextRef context;
} Canvas;
#endif
In this example, you will need to use a type Canvas, not platform-specific types.