I think objects and classes are probably completely separated from each other so it's allowed.
I know at least back in C you could do something like
struct int_pair {
int a;
int b;
struct int_pair* next;
};
typedef struct int_pair int_pair;
This is useful if you wanted to have a struct int_pair that has a pointer to an object with the same type without specifying "struct" all the time. There's no way to do this kind of thing without an intermediate name for "struct int_pair" so you might as well name them the same since they mean exactly the same thing.
Curiously, C allows you to specify types like "struct ape_buggle* next;" without raising a fuss. It doesn't really care if these types don't exist if they're structs.
The closest I get to making the class look like the object is if there's an array thats a member of a class:
class Rutabega;
class Supermarket {
Rutabega rutabegas[100];
};
When it's a member of a class and plural it can be forgiven imho since it can't pollute the namespace and it's descriptive.