typename must be used for dependent name resolution as described in 14.6 [temp.res].
An elaborated-type-specifier with the class-key present is required ("shall be used") in a friend declaration for a class. 11.4.2 [class.friend] and 7.1.5.3.1 [decl.type.elab].
However, an elaborated-type-specifier cannot be a typedef-name. 3.4.4.2 [basic.lookup.elab].
Lastly, the is no need for registration since "a definition for a static data member may be provided in a namespace scope enclosing the definition of the static member's class template." 14.5.1.3.1 [temp.static].