«Безымянный тип» действительно означает «безымянное перечисление или тип класса» [для получения дополнительной информации см. Комментарии к этому ответу].Перечисление или тип класса не обязательно должны иметь имя.Например:
struct { int i; } x; // x is of a type with no name
Вы можете попытаться использовать неназванный тип в качестве аргумента шаблона путем выведения аргумента:
template <typename T> void f(T) { }
struct { int i; } x;
f(x); // would call f<[unnamed-type]>() and is invalid in C++03
Обратите внимание, что это ограничение было снято в C ++ 0x,так что будет действительным (вы также сможете использовать локальные типы в качестве параметров шаблона типа).В C ++ 0x вы также можете использовать decltype
для «именования» безымянного типа:
template <typename T> void g() { }
struct { int i; } x;
f<decltype(x)>(); // valid in C++0x (decltype doesn't exist in C++03)