Зарезервировано пространство имен std?

Предположим, у меня есть внешнее пространство имен, а внутри этого пространства имен есть внутреннее пространство имен std. Это разрешено или запрещено стандартом?

namespace outer {
    namespace std {
        // custom implementation
    }
}

Я понимаю, что это, вероятно, считается плохой практикой или что-то в этом роде, но я просто пытаюсь понять, почему реализации C ++ stl всегда определяют _STD = ::std. Это потому, что кто-то теоретически мог сделать using namespace outer::std? Я полагаю, это будет запрещено стандартом.

Что еще более важно, следует ли в моем коде использовать :: std?


person Community    schedule 07.06.2020    source источник
comment
using namespace outer сделал бы std неоднозначным, если бы были включены какие-либо стандартные заголовки. Но ::std не является неоднозначной. Никогда не видел, чтобы кто-нибудь использовал :: std, большинство использовали только std. Вам нужно использовать только :: std, чтобы избежать двусмысленности. Но просто не определяйте external :: std, и этого достаточно!   -  person QuentinUK    schedule 07.06.2020