4 General principles [intro]

4.1 Implementation compliance [intro.compliance]

Набор 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].