Согласно (ныне несуществующей) StackOverflow документации по Extending the std
namespace и [namespace.constraints]:Использует вложенные пространства имен std и posix undefined?
поведение программы на C++ не определен, если он добавляет декларации или определения для пространства имен
std
или пространства имен в пространстве имен Std, если не указано иное.
и
Поведение C++ программы не определен, если он добавляет декларации или определения для пространства имен
posix
или пространства имен в пространстве именposix
, если не указано иное. Пространство именposix
зарезервировано для использования в соответствии с ISO/IEC 9945 и другими стандартами POSIX.
ли эти правила применяются только к глобальныхstd
и posix
пространств имен, или что-то следующее также определено:
namespace HelloWorld {
namespace std {
void terminate();
}
}
Может быть, это потому, что я родной на английском, но формулировка эти правила, по-видимому, немного расплывчаты в этом аспекте.
Правило применяется только к пространствам имен верхнего уровня. Но используя пространство имен, например, например. 'std' внутри другого пространства имен будет путать для людей, читающих или поддерживающих ваш код (который может включать вас в будущем). Подумайте, что произойдет, если вы используете 'namespace HelloWorld' (с приведенным выше примером). –
На самом деле это не расширение 'std', поскольку оно выполняется в другом пространстве имен. И это также вызовет серьезные проблемы, когда-либо сделайте что-то подобное. Хотя нет правила, запрещающего использование имени 'std' внутри другого пространства имен (которое я знаю), это не то, что вы должны делать, или даже думать о том, чтобы делать. –
Связано также: [В именах имен имен: :: std :: vs std ::] (http://stackoverflow.com/q/18544651/3919155). – jotik