If the typedef declaration defines an unnamed class (or enum), the first typedef-name declared by the declaration to be that class type (or enum type) is used to denote the class type (or enum type) for linkage purposes only ([basic.link]). [ Note: A typedef declaration involving a lambda-expression does not itself define the associated closure type, and so the closure type is not given a name for linkage purposes. — end note ] [ Example:
typedef struct { } *ps, S; // S is the class name for linkage purposes
typedef decltype([]{}) C; // the closure type has no name for linkage purposes
— end example ]