class A * A;
first specifies A
to be the name of a class and then redefines
it as the name of a pointer to an object of that class.
This means that
the elaborated form class A
must be used to refer to the
Such artistry with names can be confusing and is best avoided.
— end note