20 Library introduction [library]

20.5 Library-wide requirements [requirements]

20.5.4 Constraints on programs [constraints]

20.5.4.2 Namespace use [namespace.constraints]

20.5.4.2.1 Namespace std [namespace.std]

Поведение программы C ++ не определено, если она добавляет объявления или определения в пространство имен std или в пространство имен в пространстве имен, std если не указано иное. Программа может добавить специализацию шаблона для любого шаблона стандартной библиотеки в пространство имен std только в том случае, если объявление зависит от определяемого пользователем типа, а специализация соответствует требованиям стандартной библиотеки для исходного шаблона и не запрещена явно.176

Поведение программы на C ++ не определено, если она объявляет

  • явная специализация любой функции-члена шаблона класса стандартной библиотеки, или

  • явная специализация любого шаблона функции-члена стандартного библиотечного класса или шаблона класса, или

  • явная или частичная специализация любого шаблона класса-члена стандартного библиотечного класса или шаблона класса, или

  • руководство по вычету для любого стандартного шаблона класса библиотеки.

Программа может явно создать экземпляр шаблона, определенного в стандартной библиотеке, только в том случае, если объявление зависит от имени определяемого пользователем типа и создание экземпляра соответствует требованиям стандартной библиотеки для исходного шаблона.

Единица трансляции не должна объявлять пространство имен std как встроенное пространство имен ([namespace.def]).

Любой библиотечный код, который создает экземпляры других библиотечных шаблонов, должен быть подготовлен для адекватной работы с любой специализацией, задаваемой пользователем, которая соответствует минимальным требованиям настоящего международного стандарта.

20.5.4.2.2 Namespace posix [namespace.posix]

Поведение программы C ++ не определено, если она добавляет объявления или определения в пространство имен posix или в пространство имен в пространстве имен, posix если не указано иное. Пространство имен posix зарезервировано для использования ISO / IEC 9945 и другими стандартами POSIX.

20.5.4.2.3 Namespaces for future standardization [namespace.future]

Пространства имен верхнего уровня с именем, начинающимся с std непустой последовательности цифр и за которым следует непустая последовательность цифр, зарезервированы для будущей стандартизации. Поведение программы C ++ не определено, если она добавляет объявления или определения в такое пространство имен. [ Example: Пространство имен верхнего уровня std2 зарезервировано для использования в будущих версиях настоящего стандарта. ] end example