Является ли это стандартным синтаксисом вложенного пространства имен в C++?

Является ли этот стандарт в C++? В С# мне понравилось объявлять вложенные пространства имен следующим образом:

namespace A.B 
{
    class X
    {
    };
}

Альтернативой было это, что немного уродливее:

namespace A
{
    namespace B
    {
        class X
        {
        };
    }
}

В C++ я хотел посмотреть, есть ли у него подобная функция. В итоге я нашел это:

namespace A::B
{
    class Vector2D
    {
    }
}

Обратите внимание на ::.

Мне интересно, если это стандарт C++ или если это функция MS. Я не могу найти на нем никакой документации. В моем древнем справочнике C++ 98 это не упоминается, поэтому я задаюсь вопросом, является ли это расширением от Microsoft или новой функцией.

Ответ 1

Да, это законный синтаксис C++ 17. Это, однако, не называется вложенным пространством имен, а вложенным пространством имен.

namespace ns_name :: name (8) (поскольку C++ 17)

[...]

8) определение вложенного пространства имен: namespace A::B::C {... } эквивалентно namespace A { namespace B { namespace C {... } } }.