- typedef A B; makes B a type alias for A.
- enum {...}; is an anonymous enum definition. It is anonymous since it has no type name associated with it.
To expand on the enum syntax a bit also:
- enum C {...} D; declares a new type name C, and instantiates a variable named D of said type. Both C and D are optional.
- If C is omitted, then the type is anonymous, otherwise the enum is named.
- If D is omitted, then no variable is instantiated.
The same rules applies to struct, class, union what whatever construct I may have forgotten, possibly with some minor difference.
edit: And I almost forgot the conclusion why VS is displaying an unnamed type: because it is an unnamed type. Sometimes it will/can use the typedef name (not talking about enums, but typedefs in general, for example std::string being a typedef for a more complex template class in which case the std::string is displayed instead of the actual long type name). But strictly speaking, the type is indeed an unnamed type.