Пространство имен имен typedef

Имена, объявленные с ключевым словом typedef, занимают то же пространство имен, что и другие идентификаторы (за исключением меток операторов). Таким образом, в них не может использоваться тот же идентификатор, что и в объявленном ранее имени, за исключением случаев, когда они находятся в объявлении типа класса. Рассмотрим следующий пример:

// typedef_names1.cpp
// C2377 expected
typedef unsigned long UL;   // Declare a typedef name, UL.
int UL;                     // C2377: redefined.

Правила скрытия имен, которые относятся к другим идентификаторам, управляют и видимостью имен, объявленных с ключевым словом typedef. Поэтому следующий код допустим в C++:

// typedef_names2.cpp
typedef unsigned long UL;   // Declare a typedef name, UL
int main()
{
   unsigned int UL;   // Redeclaration hides typedef name
}

// typedef UL back in scope

См. также

Ссылки

Спецификатор typedef