Catatan: pertanyaan ini tentang name space
, bukan namespace
.
Standar C ++ memiliki beberapa referensi name space
, tetapi saya tidak melihat definisi ini. Standar mengatakan bahwa label dan makro berada dalam ruang nama yang berbeda. Semua referensi lain name space
ada di bagian kompatibilitas C / C ++, seperti ini ( konsep saat ini ):
Ini adalah salah satu dari beberapa ketidakcocokan antara C dan C ++ yang dapat dikaitkan dengan definisi ruang nama C ++ baru di mana nama dapat dideklarasikan sebagai tipe dan sebagai non-tipe dalam lingkup tunggal yang menyebabkan nama non-tipe menyembunyikan ketik nama dan mensyaratkan bahwa kelas kata kunci, struct, union atau enum digunakan untuk merujuk pada nama tipe. Definisi ruang nama baru ini memberikan kemudahan notasi penting bagi pemrogram C ++ dan membantu membuat penggunaan tipe-tipe yang didefinisikan pengguna semirip mungkin dengan penggunaan tipe fundamental.
Apa definisi ruang nama baru ini ? Di mana saya bisa menemukannya di standar? Apa aturannya? Aturan tampaknya lebih rumit, daripada "tipe non-tipe hide". Seperti, ini tidak mengkompilasi:
typedef int Foo; // Foo is a type
void Foo(); // not a type, but compile error, instead of hiding
Tapi ini memang:
struct Foo { }; // Foo is a type as well
void Foo(); // This hides the type Foo. "struct Foo" refers to the type
Dan ini tidak dapat dikompilasi:
struct Foo { }; // Type
namespace Foo { } // Non-type, but compiler error instead of hiding
[stmt.label]/1
dan satu untuk makro [cpp]/8
.