Набор diagnosable rules состоит из всех синтаксических и семантических правил в этом международном стандарте, за исключением тех правил, которые содержат явную нотацию, что «диагностика не требуется» или которые описаны как приводящие к «неопределенному поведению».
Хотя этот международный стандарт устанавливает только требования к реализациям C ++, эти требования часто легче понять, если они сформулированы как требования к программам, частям программ или выполнению программ. Такие требования имеют следующее значение:
Если программа не содержит нарушений правил настоящего международного стандарта, соответствующая реализация должна в пределах своих ресурсов принять и правильно выполнить2 эту программу.
Если программа содержит нарушение любого диагностируемого правила или возникновение конструкции, описанной в этом международном стандарте как «условно поддерживаемой», когда реализация не поддерживает эту конструкцию, соответствующая реализация должна выдать по крайней мере одно диагностическое сообщение.
Если программа содержит нарушение правила, для которого не требуется диагностика, настоящий международный стандарт не налагает никаких требований на реализации по отношению к этой программе.
[ Note: Во время вывода и замены аргументов шаблона определенные конструкции, которые в других контекстах требуют диагностики, обрабатываются по-разному; см [temp.deduct]. ] — end note
Для классов и шаблонов классов в разделах библиотеки указываются частичные определения. Private members не указаны, но каждая реализация должна предоставлять их для завершения определений в соответствии с описанием в разделах библиотеки.
Для функций, шаблонов функций, объектов и значений в разделах библиотеки указываются объявления. Реализации должны предоставлять определения, соответствующие описаниям в разделах библиотеки.
Имена, определенные в библиотеке, имеют область пространства имен ([basic.namespace]). C ++ translation unit получает доступ к этим именам через including соответствующий заголовок стандартной библиотеки.
Шаблоны, классы, функции и объекты в библиотеке имеют внешние linkage. Реализация предоставляет определения для стандартных библиотечных сущностей, если это необходимо, при объединении единиц перевода для формирования полной программы на C ++ ([lex.phases]).
Определены два типа реализаций: a hosted implementation и a freestanding implementation. Для размещенной реализации этот международный стандарт определяет набор доступных библиотек. Автономная реализация - это реализация, в которой выполнение может происходить без использования операционной системы, и имеет набор библиотек, определяемый реализацией, который включает определенные библиотеки поддержки языка ([compliance]).
Соответствующая реализация может иметь расширения (включая дополнительные библиотечные функции) при условии, что они не изменяют поведение какой-либо правильно сформированной программы. Реализации требуются для диагностики программ, использующих такие расширения, которые не соответствуют этому международному стандарту. Однако после этого они могут компилировать и выполнять такие программы.
Каждая реализация должна включать документацию, которая идентифицирует все условно поддерживаемые конструкции, которые она не поддерживает, и определяет все специфичные для локали характеристики.3
«Правильное выполнение» может включать неопределенное поведение в зависимости от обрабатываемых данных; см. пункт [intro.defs] и [intro.execution].
Эта документация также определяет поведение, определяемое реализацией; см [intro.execution].