Note that this allows you to use the class name in pointers, references, and function prototypes. However you cannot instantiate the class with just a forward declaration. In order to instantiate the class, or to dereference a pointer, the class must be fully defined.