Подробные спецификации содержат следующие элементы:
название и краткое описание
синопсис (определение класса или объявление функции, в зависимости от ситуации)
ограничения на аргументы шаблона, если таковые имеются
описание инвариантов классов
описание семантики функции
Описания функций-членов класса следуют в следующем порядке (при необходимости):157
конструктор (ы) и деструктор
функции копирования, перемещения и присвоения
функции сравнения
функции-модификаторы
функции наблюдателя
операторы и другие функции, не являющиеся членами
Описание семантики функции содержит следующие элементы (при необходимости):158
Requires: предварительные условия для вызова функции
Effects: действия, выполняемые функцией
Synchronization: операции синхронизации ([intro.multithread]), применимые к функции
Postconditions: наблюдаемые результаты, установленные функцией
Returns: описание значений, возвращаемых функцией
Throws: любые исключения, созданные функцией, и условия, которые могут вызвать исключение
Complexity: временная и / или пространственная сложность функции
Remarks: дополнительные семантические ограничения на функцию
Error conditions: условия ошибок для кодов ошибок, сообщаемых функцией
Каждый раз, когда Effects элемент указывает, что семантика некоторой функции F представляет собой Equivalent to некоторую кодовую последовательность, различные элементы интерпретируются следующим образом. Если Fсемантика определяет Requires элемент, то это требование логически налагается до equivalent-to семантики. Далее, семантика кодовой последовательности определяется Requires, Effects, Synchronization, Postconditions, Returns, Throws, Complexity, Remarks, и Error conditions указана для функциональных вызовов , содержащихся в кодовой последовательности. Значение, возвращаемое из F , определяется элементом F's Returns , или, если F не имеет Returns элемента,void невозврат из F задается return операторами в кодовой последовательности. Если Fсемантика содержит элемент Throws, Postconditionsили Complexity , то он заменяет любые вхождения этого элемента в кодовой последовательности.
Для незарезервированных функций замены и обработчика Clause [language.support] определяет два поведения для рассматриваемых функций: их обязательное поведение и поведение по умолчанию. default behavior Описывает определение функции , предоставляемой реализации. required behavior Описывает семантику определения функции , представленное либо реализации или программой C ++. Если в описании не делается явных различий, описанное поведение является обязательным.
Если формулировка требования сложности требует отрицательного числа операций, фактическое требование - нулевое количество операций.159
Требования к сложности, указанные в разделах библиотеки, являются верхними границами, и реализации, которые обеспечивают более высокие гарантии сложности, удовлетворяют этим требованиям.
Условия ошибки определяют условия, при которых функция может выйти из строя. Условия перечислены вместе с подходящим объяснением как enum class errc константы ([syserr]).
Для экономии места элементы, не относящиеся к классу, опускаются. Например, если в классе не указаны какие-либо функции сравнения, подпункта «Функции сравнения» не будет.
Для экономии места элементы, не относящиеся к функции, опускаются. Например, если функция не определяет никаких дополнительных предварительных условий, Requires: абзаца не будет .
В некоторых случаях это упрощает представление требований к сложности.