Espace de nom des noms typedef
Les noms déclarés à l'aide de typedef occupent le même espace de noms que d'autres identificateurs (sauf les étiquettes d'instruction). Par conséquent, ils ne peuvent pas utiliser le même identificateur qu'un nom déclaré précédemment, sauf dans une déclaration de type classe. Prenons l'exemple suivant :
// typedef_names1.cpp
// C2377 expected
typedef unsigned long UL; // Declare a typedef name, UL.
int UL; // C2377: redefined.
Les règles de masquage de noms qui se rapportent à d'autres identificateurs régissent également la visibilité des noms déclarés à l'aide de typedef. Par conséquent, l'exemple suivant est autorisé en 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