Классы которые ничего не делают, включая пустые определения
структур -- нужны для определения нового, отличного от других типа.
Потому, что где-то в коде потом что-то может делаться по-разному в
зависимости от типа. Кстати с этим связана такая запутывающая
особенность, что в C++ ключевое слово typedef на самом деле не
определяет новый тип, а лишь создаёт алиас (другое имя) для уже
существующего другого типа. А выражение вида "struct X {};"
определит новый тип X.