Зауважте: це питання про name space
, а не namespace
.
Стандарт C ++ має деякі посилання на це name space
, але я не бачу визначення цього. У стандартах зазначено, що мітки та макроси знаходяться в різних просторах імен. Усі інші посилання на name space
розділ сумісності C / C ++, як це ( поточний проект ):
Це одна з небагатьох несумісностей між C і C ++, яку можна віднести до нового визначення простору імен C ++, де ім'я можна оголосити як тип і як не тип в єдиній області, що призведе до того, що ім'я нетипу приховує ім'я типу та вимагає, щоб ключові слова клас, структура, об'єднання чи enum використовувались для позначення імені типу. Це нове визначення простору імен забезпечує важливі нотаційні зручності для програмістів на C ++ та допомагає зробити використання визначених користувачем типів максимально подібним до використання основних типів.
Що це за нове визначення простору імен ? Де його можна знайти в стандарті? Які точні правила? Правила здаються складнішими, ніж "типи прихованих типів". Мовляв, це не компілюється:
typedef int Foo; // Foo is a type
void Foo(); // not a type, but compile error, instead of hiding
Але це робить:
struct Foo { }; // Foo is a type as well
void Foo(); // This hides the type Foo. "struct Foo" refers to the type
І це не компілює:
struct Foo { }; // Type
namespace Foo { } // Non-type, but compiler error instead of hiding
[stmt.label]/1
та одне для макросів [cpp]/8
.