Classes are distinct types. An empty class can be used in an intermediate step to force an overload, template instantiation or compile time constant value.
They can be used to differentiate between states (see boost::statechart) or execptions that do not require any member data. I'm sure there are other uses, as well, but these are the first that come to mind right now.
Oh! An even better example would be iterator_traits and the empty "tag" classes that are used to differentiate types of iterators passed as template arguments.