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