Un typedef define un tipo. Los amigos decls declaran clases o funciones de amigo (sustancialmente ámbitos), que luego tienen "acceso" al área no pública de la clase declarante ...
Primitivos, i.E. un float o un int * no definen un ámbito con código, etc., , de todos modos, no "usan" la clase.
No olvide, también puede "empaquetar" convenciones de llamadas, atributos de alineación y otras cosas específicas del compilador en un typedef, es decir, TYPES de vectores múltiples implementados por la misma clase pero con diferentes atributos attribs. => Un tipo no es una clase, sino viceversa.
En mi humilde opinión, declarar un amigo typedef puede ser útil, pero cuando se puede establecer "friend typedefs" desde cualquier lugar como amigo, las amistades pueden ser extremadamente incomprensibles y propensas a errores, especialmente cuando las plantillas se usan excesivamente.
Invalidar un typedef individual puede arruinar todo el proyecto debido a dependencias generalizadas. Los amigos de plantillas y los de tipo 0x typedefs son útiles, pero no relajen las reglas de una declaración de amigo.
No conozco ninguna propuesta relativa a friend typedefs.
Dado que su respuesta no proporciona ninguna información útil, ¿considera usted eliminarla? –