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]).

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