For purposes of access checking, the injected-class-name is treated as
if it were a public member name
. A class is considered defined after the closing brace of its
class-specifier has been seen even though its member
functions are in general not yet defined
.