Ответ 1
"Без имени" действительно означает "неназванное перечисление или тип класса" [для получения дополнительной информации см. комментарии к этому ответу]. Перечисление или тип класса не обязательно должны иметь имя. Например:
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
Обратите внимание, что это ограничение было снято в С++ 0x, поэтому оно будет действительным (вы также сможете использовать локальные типы в качестве параметров шаблона типа). В С++ 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)