Not: Bu soru hakkında name space, değil namespace.
C ++ standardının bazı referansları vardır name space, ancak bunun tanımını görmüyorum. Standartlar, etiketlerin ve makroların farklı ad alanlarında olduğunu söylüyor. Diğer tüm referanslar name spaceşu şekilde C / C ++ uyumluluk bölümünde ( mevcut taslak ):
Bu, C ve C ++ arasında , bir adın tür olarak ve tür olmayan adın gizlenmesine neden olan tek bir kapsamda türsüz olarak bildirilebildiği yeni C ++ ad alanı tanımına atfedilebilecek birkaç uyumsuzluktan biridir. tür adı ve sınıf, yapı, birleşim veya enum anahtar sözcüklerinin tür adını belirtmek için kullanılmasını gerektirir. Bu yeni ad alanı tanımı , C ++ programcılarına önemli gösterim kolaylığı sağlar ve kullanıcı tanımlı türlerin, temel türlerin kullanımına mümkün olduğunca benzer şekilde kullanılmasına yardımcı olur.
Bu yeni ad alanı tanımı nedir? Standartta nerede bulabilirim? Kesin kurallar nelerdir? Kurallar, "tür olmayan gizleme türleri" nden daha karmaşık görünmektedir. Mesela bu derlenmiyor:
typedef int Foo; // Foo is a type
void Foo(); // not a type, but compile error, instead of hiding
Ancak bu:
struct Foo { }; // Foo is a type as well
void Foo(); // This hides the type Foo. "struct Foo" refers to the type
Ve bu da derlenmiyor:
struct Foo { }; // Type
namespace Foo { } // Non-type, but compiler error instead of hiding
[stmt.label]/1ve diğeri makrolar için [cpp]/8.