List of Tables [tab]


5.5 Alternative tokens [lex.digraph]

Таблица 1 - Альтернативные токены
Альтернатива Начальный Альтернатива Начальный Альтернатива Начальный
<% { and && and_­eq &=
%> } bitor | or_­eq |=
<: [ or || xor_­eq ^=
:> ] xor ^ not !
%: # compl ~ not_­eq !=
%:%: ## bitand &

5.10 Identifiers [lex.name]

Таблица 2 - допустимые диапазоны символов
00A8 00AA 00AD 00AF 00B2-00B5
00B7-00BA 00BC-00BE 00C0-00D6 00D8-00F6 00F8-00FF
0100-167F 1681-180D 180F-1FFF
200B-200D 202A-202E 203F-2040 2054 2060-206F
2070-218F 2460-24FF 2776-2793 2C00-2DFF 2E80-2FFF
3004-3007 3021-302F 3031-D7FF
F900-FD3D FD40-FDCF FDF0-FE44 FE47-FFFD
10000-1FFFD 20000-2FFFD 30000-3FFFD 40000-4FFFD 50000-5FFFD
60000-6FFFD 70000-7FFFD 80000-8FFFD 90000-9FFFD A0000-AFFFD
B0000-BFFFD C0000-CFFFD D0000-DFFFD E0000-EFFFD

5.10 Identifiers [lex.name]

Таблица 3 - диапазоны запрещенных изначально символов (объединение символов)
0300-036F 1DC0-1DFF 20D0-20FF FE20-FE2F

5.10 Identifiers [lex.name]

Таблица 4 - Идентификаторы со специальным значением
override final

5.11 Keywords [lex.key]

Таблица 5 - Ключевые слова
alignas continue friend register true
alignof decltype goto reinterpret_­cast try
asm default if return typedef
auto delete inline short typeid
bool do int signed typename
break double long sizeof union
case dynamic_­cast mutable static unsigned
catch else namespace static_­assert using
char enum new static_­cast virtual
char16_­t explicit noexcept struct void
char32_­t export nullptr switch volatile
class extern operator template wchar_­t
const false private this while
constexpr float protected thread_­local
const_­cast for public throw

5.11 Keywords [lex.key]

Таблица 6 - Альтернативные представления
and and_­eq bitand bitor compl not
not_­eq or or_­eq xor xor_­eq

5.13.2 Integer literals [lex.icon]

Таблица 7 - Типы целочисленных литералов
СуффиксДесятичный литералДвоичный, восьмеричный или шестнадцатеричный литерал
никто int int
long int unsigned int
long long int long int
unsigned long int
long long int
unsigned long long int
u или U unsigned int unsigned int
unsigned long int unsigned long int
unsigned long long int unsigned long long int
l или L long int long int
long long int unsigned long int
long long int
unsigned long long int
Оба u или U unsigned long int unsigned long int
и l или L unsigned long long int unsigned long long int
ll или LL long long int long long int
unsigned long long int
Оба u или U unsigned long long int unsigned long long int
и ll или LL

5.13.3 Character literals [lex.ccon]

Таблица 8 - escape-последовательности
новая линия NL (LF) \n
горизонтальная табуляция HT \t
вертикальная табуляция VT \v
Backspace BS \b
возврат каретки CR \r
подача формы FF \f
тревога BEL \a
обратная косая черта \ \\
вопросительный знак ? \?
одинарная кавычка ' \'
двойная кавычка " \"
восьмеричное число ооо \ooo
шестнадцатеричный номер ххх \xhhh

5.13.5 String literals [lex.string]

Таблица 9 - конкатенации строковых литералов
Источник Средства Источник Средства Источник Средства
u"a" u"b" u"ab" U"a" U"b" U"ab" L"a" L"b" L"ab"
u"a" "b" u"ab" U"a" "b" U"ab" L"a" "b" L"ab"
"a" u"b" u"ab" "a" U"b" U"ab" "a" L"b" L"ab"

6.9.3 CV-qualifiers [basic.type.qualifier]

Таблица 10 - Отношения по const и volatile
no cv-qualifier < const
no cv-qualifier < volatile
no cv-qualifier < const volatile
const < const volatile
volatile < const volatile

10.1.7.2 Simple type specifiers [dcl.type.simple]

Таблица 11 - simple-type-specifiers и типы, которые они указывают
Спецификатор (ы) Тип
type-name названный тип
simple-template-id тип, как определено в [temp.names]
template-name заполнитель для выводимого типа
символ «Чар»
беззнаковый символ «Беззнаковый символ»
подписанный символ «Подписанный символ»
char16_t «Char16_t»
char32_t «Char32_t»
bool «Булево»
беззнаковый «Беззнаковое целое»
беззнаковое целое «Беззнаковое целое»
подписано «Int»
подписанный int «Int»
int «Int»
беззнаковый короткий int «Короткое беззнаковое целое»
беззнаковый короткий «Короткое беззнаковое целое»
беззнаковое длинное целое «Беззнаковое длинное целое число»
беззнаковый длинный «Беззнаковое длинное целое число»
беззнаковый длинный длинный int «Беззнаковый длинный длинный int»
беззнаковый длинный длинный «Беззнаковый длинный длинный int»
подписанный длинный int «Длинный интервал»
подписан долго «Длинный интервал»
подписанный длинный длинный int «Длинный длинный интервал»
подписан долго «Длинный длинный интервал»
длинный длинный int «Длинный длинный интервал»
долго долго «Длинный длинный интервал»
длинный интервал «Длинный интервал»
длинный «Длинный интервал»
подписанный короткий int «Короткий интервал»
подписанный короткий «Короткий интервал»
короткий int «Короткий интервал»
короткая «Короткий интервал»
wchar_t «Wchar_t»
плавать "плавать"
двойной "двойной"
длинный двойной «Длинный дубль»
пустота "пустота"
авто заполнитель для выводимого типа
decltype (авто) заполнитель для выводимого типа
decltype ( expression) тип, как определено ниже

16.3.1.2 Operators in expressions [over.match.oper]

Таблица 12 - Связь между оператором и обозначением вызова функции
Подпункт Выражение Как функция-член Как функция, не являющаяся членом
[over.unary] @a (a).operator@ () operator@(a)
[over.binary] a@b (a).operator@ (b) operator@(a, b)
[over.ass] a=b (a).operator= (b)
[over.sub] a[b] (a).operator[](b)
[over.ref] a-> (a).operator->()
[over.inc] a@ (a).operator@ (0) operator@(a, 0)

16.3.3.1.1 Standard conversion sequences [over.ics.scs]

Таблица 13 - Конверсии
Преобразование Категория Классифицировать Подпункт
Никаких преобразований не требуется Личность
Lvalue-to-rvalue преобразование [conv.lval]
Преобразование массива в указатель Преобразование Lvalue [conv.array]
Преобразование функции в указатель Точное совпадение [conv.func]
Квалификационные преобразования [conv.qual]
Преобразование указателя на функцию Квалификационная корректировка [conv.fctptr]
Интегральные акции [conv.prom]
Продвижение с плавающей запятой Продвижение Продвижение [conv.fpprom]
Интегральные преобразования [conv.integral]
Преобразования с плавающей запятой [conv.double]
Преобразования с плавающей запятой [conv.fpint]
Преобразования указателей Преобразование Преобразование [conv.ptr]
Указатель на преобразования членов [conv.mem]
Логические преобразования [conv.bool]

17.5.3 Variadic templates [temp.variadic]

Таблица 14 - Значение сворачивания пустых последовательностей
ОператорЗначение, когда пакет параметров пуст
&& true
|| false
, void()

20.1 General [library.general]

Таблица 15 - Категории библиотеки
Пункт Категория
[language.support] Библиотека языковой поддержки
[diagnostics] Библиотека диагностики
[utilities] Библиотека общих утилит
[strings] Библиотека строк
[localization] Библиотека локализации
[containers] Библиотека контейнеров
[iterators] Библиотека итераторов
[algorithms] Библиотека алгоритмов
[numerics] Библиотека чисел
[input.output] Библиотека ввода / вывода
[re] Библиотека регулярных выражений
[atomics] Библиотека атомарных операций
[thread] Библиотека поддержки потоков

20.5.1.2 Headers [headers]

Таблица 16 - заголовки библиотеки C ++
<algorithm> <future> <numeric> <strstream>
<any> <initializer_­list> <optional> <system_­error>
<array> <iomanip> <ostream> <thread>
<atomic> <ios> <queue> <tuple>
<bitset> <iosfwd> <random> <type_­traits>
<chrono> <iostream> <ratio> <typeindex>
<codecvt> <istream> <regex> <typeinfo>
<complex> <iterator> <scoped_­allocator> <unordered_­map>
<condition_­variable> <limits> <set> <unordered_­set>
<deque> <list> <shared_­mutex> <utility>
<exception> <locale> <sstream> <valarray>
<execution> <map> <stack> <variant>
<filesystem> <memory> <stdexcept> <vector>
<forward_­list> <memory_­resource> <streambuf>
<fstream> <mutex> <string>
<functional> <new> <string_­view>

20.5.1.2 Headers [headers]

Таблица 17 - Заголовки C ++ для средств библиотеки C
<cassert> <cinttypes> <csignal> <cstdio> <cwchar>
<ccomplex> <ciso646> <cstdalign> <cstdlib> <cwctype>
<cctype> <climits> <cstdarg> <cstring>
<cerrno> <clocale> <cstdbool> <ctgmath>
<cfenv> <cmath> <cstddef> <ctime>
<cfloat> <csetjmp> <cstdint> <cuchar>

20.5.1.2 Headers [headers]

Таблица 18 - Стандартные названия C, приложения K
abort_­handler_­s mbstowcs_­s strncat_­s vswscanf_­s
asctime_­s memcpy_­s strncpy_­s vwprintf_­s
bsearch_­s memmove_­s strtok_­s vwscanf_­s
constraint_­handler_­t memset_­s swprintf_­s wcrtomb_­s
ctime_­s printf_­s swscanf_­s wcscat_­s
errno_­t qsort_­s tmpfile_­s wcscpy_­s
fopen_­s RSIZE_­MAX TMP_­MAX_­S wcsncat_­s
fprintf_­s rsize_­t tmpnam_­s wcsncpy_­s
freopen_­s scanf_­s vfprintf_­s wcsnlen_­s
fscanf_­s set_­constraint_­handler_­s vfscanf_­s wcsrtombs_­s
fwprintf_­s snprintf_­s vfwprintf_­s wcstok_­s
fwscanf_­s snwprintf_­s vfwscanf_­s wcstombs_­s
getenv_­s sprintf_­s vprintf_­s wctomb_­s
gets_­s sscanf_­s vscanf_­s wmemcpy_­s
gmtime_­s strcat_­s vsnprintf_­s wmemmove_­s
ignore_­handler_­s strcpy_­s vsnwprintf_­s wprintf_­s
L_­tmpnam_­s strerror_­s vsprintf_­s wscanf_­s
localtime_­s strerrorlen_­s vsscanf_­s
mbsrtowcs_­s strlen_­s vswprintf_­s

20.5.1.3 Freestanding implementations [compliance]

Таблица 19 - Заголовки C ++ для автономных реализаций
Подпункт Заголовок (ы)
<ciso646>
[support.types] Типы <cstddef>
[support.limits] Свойства реализации <cfloat> <limits> <climits>
[cstdint] Целочисленные типы <cstdint>
[support.start.term] Начало и завершение <cstdlib>
[support.dynamic] Динамическое управление памятью <new>
[support.rtti] Идентификация типа <typeinfo>
[support.exception] Обработка исключений <exception>
[support.initlist] Списки инициализаторов <initializer_­list>
[support.runtime] Другая поддержка во время выполнения <cstdarg>
[meta] Типовые черты <type_­traits>
[atomics] Атомика <atomic>
[depr.cstdalign.syn], [depr.cstdbool.syn] Устаревшие заголовки <cstdalign> <cstdbool>

20.5.3.1 Template argument requirements [utility.arg.requirements]

Таблица 20 - EqualityComparable требования
Выражение Тип возврата Требование
a == b конвертируемый в bool == является отношением эквивалентности, то есть обладает следующими свойствами:
  • Для всех a, a == a.

  • Если a == b, то b == a.

  • Если a == b и b == c, то a == c.


20.5.3.1 Template argument requirements [utility.arg.requirements]

Таблица 21 - LessThanComparable требования
Выражение Тип возврата Требование
a < b конвертируемый в bool < это strict weak ordering relation

20.5.3.1 Template argument requirements [utility.arg.requirements]

Таблица 22 - DefaultConstructible требования
Выражение Пост-условие
T t; объект t инициализирован по умолчанию
T u{}; объект u инициализирован значением или агрегатом
T()
T{}
объект типа T инициализируется значением или агрегатом

20.5.3.1 Template argument requirements [utility.arg.requirements]

Таблица 23 - MoveConstructible требования
Выражение Пост-условие
T u = rv; u эквивалентно значению rv до постройки
T(rv) T(rv) эквивалентно значению rv до постройки
rvсостояние не указано [ Note: rv должно все еще соответствовать требованиям библиотечного компонента, который его использует. Операции, перечисленные в этих требованиях, должны работать, как указано, независимо от того rv , были они перемещены или нет. ] end note

20.5.3.1 Template argument requirements [utility.arg.requirements]

Таблица 24 - CopyConstructible требования (в дополнение к MoveConstructible)
Выражение Пост-условие
T u = v; значение v не изменилось и эквивалентно u
T(v) значение v не изменилось и эквивалентно T(v)

20.5.3.1 Template argument requirements [utility.arg.requirements]

Таблица 25 - MoveAssignable требования
Выражение Тип возврата Возвращаемое значение Пост-условие
t = rv T& t Если t и rv не относятся к одному и тому же объекту, t эквивалентно значению rv до присвоения
rvсостояние не указано. [ Note:  rv должен по-прежнему соответствовать требованиям библиотечного компонента, который его использует, независимо от того, относится ли он к одному t и rv тому же объекту или нет . Операции, перечисленные в этих требованиях, должны работать, как указано, независимо от того rv , были они перемещены или нет. ] end note

20.5.3.1 Template argument requirements [utility.arg.requirements]

Таблица 26 - CopyAssignable требования (в дополнение к MoveAssignable)
Выражение Тип возврата Возвращаемое значение Пост-условие
t = v T& t t эквивалентно v, значение v не изменяется

20.5.3.1 Template argument requirements [utility.arg.requirements]

Таблица 27 - Destructible требования
Выражение Пост-условие
u.~T() Все ресурсы, принадлежащие владельцу u , возвращаются, никаких исключений не распространяется.

20.5.3.3 NullablePointer requirements [nullablepointer.requirements]

Таблица 28 - NullablePointer требования
Выражение Тип возврата Операционная семантика
P u(np);
Postconditions: u == nullptr
P u = np;
P(np) Postconditions: P(np) == nullptr
t = np P& Postconditions: t == nullptr
a != b контекстно конвертируемый в bool !(a == b)
a == np контекстно конвертируемый в bool a == P()
np == a
a != np контекстно конвертируемый в bool !(a == np)
np != a

20.5.3.4 Hash requirements [hash.requirements]

Таблица 29 - Hash требования
Выражение Тип возврата Требование
h(k) size_­t Возвращаемое значение должно зависеть только от аргумента k на протяжении всей программы. [ Note: Таким образом, все вычисления выражения h(k) с одинаковым значением для k дают одинаковый результат для данного выполнения программы. ] [ Для двух разных значений и вероятность того, что и сравнить равные, должна быть очень мала и приближается . ] end noteNote: t1 t2 h(t1) h(t2) 1.0 / numeric_­limits<size_­t>​::​max() end note
h(u) size_­t Изменять не буду u.

20.5.3.5 Allocator requirements [allocator.requirements]

Таблица 30 - Описательные определения переменных
ПеременнаяОпределение
T, U, C любой - cvнеквалифицированный тип объекта ( [basic.types])
X класс Allocator для типа T
Y соответствующий класс Allocator для типа U
XX тип allocator_­traits<X>
YY тип allocator_­traits<Y>
a, a1, a2 lvalues ​​типа X
u имя объявляемой переменной
b значение типа Y
c указатель типа, C* через который допустимо косвенное обращение
p значение типа XX​::​pointer, полученное при вызове a1.allocate, где a1 == a
q значение типа, XX​::​const_­pointer полученное преобразованием из значения p.
w значение типа, XX​::​void_­pointer полученное преобразованием из значения p
x значение типа, XX​::​const_­void_­pointer полученное преобразованием из значения q или значения w
y значение типа, XX​::​const_­void_­pointer полученное преобразованием из значения результата YY​::​allocate, или значение типа (возможно const) std​::​nullptr_­t.
n значение типа XX​::​size_­type.
Args пакет параметров шаблона
args пакет параметров функции с шаблоном Args&&

20.5.3.5 Allocator requirements [allocator.requirements]

Таблица 31 - Требования к распределителю
ВыражениеТип возвратаУтверждение / примечаниеДефолт
до / после состояния
X​::​pointer T*
X​::​const_­pointer X​::​pointer конвертируется в X​::​const_­pointer pointer_­traits<X​::​​pointer>​::​​rebind<const T>
X​::​void_­pointer
Y​::​void_­pointer
X​::​pointer конвертируется в X​::​void_­pointer. X​::​void_­pointer и Y​::​void_­pointer однотипны. pointer_­traits<X​::​​pointer>​::​​rebind<void>
X​::​const_­void_­pointer
Y​::​const_­void_­pointer
X​::​pointer, X​::​const_­pointerИ X​::​void_­pointer могут быть конвертированы в X​::​const_­void_­pointer. X​::​const_­void_­pointer и Y​::​const_­void_­pointer однотипны. pointer_­traits<X​::​​pointer>​::​​rebind<const void>
X​::​value_­type Идентично T
X​::​size_­type беззнаковый целочисленный тип тип, который может представлять размер самого большого объекта в модели распределения. make_­unsigned_­t<X​::​​difference_­type>
X​::​difference_­type знаковый целочисленный тип тип, который может представлять разницу между любыми двумя указателями в модели распределения. pointer_­traits<X​::​​pointer>​::​​difference_­type
typename X​::​template rebind<U>​::​other Y Для всех U (в том числе T) Y​::​template rebind<T>​::​other есть X. См. Примечание A ниже.
*p T&
*q const T& *q относится к тому же объекту, что и *p
p->m тип T​::​m Requires: (*p).m четко определено. эквивалентно (*p).m
q->m тип T​::​m Requires: (*q).m четко определено. эквивалентно (*q).m
static_­cast<​X​::​pointer​>(w) X​::​pointer static_­cast<X​::​pointer>(w) == p
static_­cast<​X​::​const_­pointer​>(x) X​::​const_­pointer static_­cast< X​::​const_­pointer​>(x) == q
pointer_­traits<​X​::​pointer​>​::​pointer_­to(r) X​::​pointer
a.allocate(n) X​::​pointer Память выделяется для n объектов типа, T но объекты не создаются. allocate может вызвать соответствующее исключение. 175 [ Note: Если n == 0, возвращаемое значение не указано. ] end note
a.allocate(n, y) X​::​pointer То же, что и a.allocate(n). Использование y не указано, но оно предназначено для помощи в местности. a.allocate(n)
a.deallocate(p,n) (не используется) Requires: p должен быть значением, возвращенным более ранним вызовом allocate , который не был аннулирован промежуточным вызовом deallocate. n должен соответствовать значению, переданному allocate для получения этой памяти.
Throws: Ничего такого.
a.max_­size() X​::​size_­type наибольшее значение, которое может быть значимо передано в X​::​allocate() numeric_­limits<size_­type>​::​max() / sizeof​(value_­type)
a1 == a2 bool возвращается true только в том случае, если память, выделенная каждым из них, может быть освобождена через другую. operator== должен быть рефлексивным, симметричным и транзитивным и не должен выходить через исключение.
a1 != a2 bool такой же как !(a1 == a2)
a == b bool такой же как a == Y​::​rebind<T>​::​other(b)
a != b bool такой же как !(a == b)
X u(a);
X u = a;
Не должен выходить из-за исключения.
Postconditions: u == a
X u(b); Не должен выходить из-за исключения.
Postconditions: Y(u) == b, u == X(b)
X u(std​::​move(a));
X u = std​::​move(a);
Не должен выходить из-за исключения.
Postconditions: u равно предыдущему значению a.
X u(std​::​move(b)); Не должен выходить из-за исключения.
Postconditions: u равно предыдущему значению X(b).
a.construct(c, args) (не используется) Effects: Создает объект типа C в c ​::​new ((void*)c) C(forward<​Args>​(args)...)
a.destroy(c) (не используется) Effects: Уничтожает объект на c c->~C()
a.select_­on_­container_­copy_­construction() X Обычно возвращает либо, a либо X() return a;
X​::​propagate_­on_­container_­copy_­assignment Идентичен или производный от true_­type или false_­type true_­type только если распределитель типа X должен быть скопирован, когда клиентскому контейнеру назначено копирование. См. Примечание B ниже. false_­type
X​::​propagate_­on_­container_­move_­assignment Идентичен или производный от true_­type или false_­type true_­type только в том случае, если распределитель типа X должен быть перемещен при назначении перемещения клиентскому контейнеру. См. Примечание B ниже. false_­type
X​::​propagate_­on_­- container_­swap Идентичен или производный от true_­type или false_­type true_­type только если распределитель типа X должен быть заменен при замене клиентского контейнера. См. Примечание B ниже. false_­type
X​::​is_­always_­equal Идентичен или производный от true_­type или false_­type true_­type только тогда , когда выражение a1 == a2 гарантированно будет true для любых двух (возможно const) значений a1, a2 типа X. is_­empty<X>​::​​type

21.1 General [support.general]

Таблица 32 - Сводная информация о библиотеке поддержки языков
Подпункт Заголовок (ы)
[support.types] Общие определения <cstddef>
<cstdlib>
[support.limits] Свойства реализации <limits>
<climits>
<cfloat>
[cstdint] Целочисленные типы <cstdint>
[support.start.term] Начало и завершение <cstdlib>
[support.dynamic] Динамическое управление памятью <new>
[support.rtti] Идентификация типа <typeinfo>
[support.exception] Обработка исключений <exception>
[support.initlist] Списки инициализаторов <initializer_­list>
[support.runtime] Другая поддержка во время выполнения <csignal>
<csetjmp>
<cstdarg>
<cstdlib>

22.1 General [diagnostics.general]

Таблица 33 - Сводка библиотеки диагностики
Подпункт Заголовок (ы)
[std.exceptions] Классы исключений <stdexcept>
[assertions] Утверждения <cassert>
[errno] Номера ошибок <cerrno>
[syserr] Поддержка системных ошибок <system_­error>

23.1 General [utilities.general]

Таблица 34 - Сводка библиотеки общих утилит
Подпункт Заголовок (ы)
[utility] Компоненты утилиты <utility>
[intseq] Целочисленные последовательности во время компиляции <utility>
[pairs] Пары <utility>
[tuple] Кортежи <tuple>
[optional] Необязательные объекты <optional>
[variant] Варианты <variant>
[any] Хранение любого типа <any>
[bitset] Последовательности битов фиксированного размера <bitset>
[memory] объем памяти <memory>
<cstdlib>
[smartptr] Умные указатели <memory>
[mem.res] Ресурсы памяти <memory_­resource>
[allocator.adaptor] Распределители с заданной областью <scoped_­allocator>
[function.objects] Функциональные объекты <functional>
[meta] Типовые черты <type_­traits>
[ratio] Рациональная арифметика во время компиляции <ratio>
[time] Утилиты времени <chrono>
<ctime>
[type.index] Индексы типов <typeindex>
[execpol] Политики исполнения <execution>

23.6.3.3 Assignment [optional.assign]

Таблица 35 - optional​::​operator=(const optional&) эффекты
*this содержит значение*this не содержит значения
rhs содержит значение присваивает *rhs содержащееся значение инициализирует значение , содержащееся как если прямая не-список-инициализацию объекта типа T с *rhs
rhs не содержит значения уничтожает содержащееся значение, вызывая val->T​::​~T() нет эффекта

23.6.3.3 Assignment [optional.assign]

Таблица 36 - optional​::​operator=(optional&&) эффекты
*this содержит значение*this не содержит значения
rhs содержит значение присваивает std​::​move(*rhs) содержащееся значение инициализирует значение , содержащееся как если прямая не-список-инициализацию объекта типа T с std​::​move(*rhs)
rhs не содержит значения уничтожает содержащееся значение, вызывая val->T​::​~T() нет эффекта

23.6.3.3 Assignment [optional.assign]

Таблица 37 - optional​::​operator=(const optional<U>&) эффекты
*this содержит значение*this не содержит значения
rhs содержит значение присваивает *rhs содержащееся значение инициализирует значение , содержащееся как если прямая не-список-инициализацию объекта типа T с *rhs
rhs не содержит значения уничтожает содержащееся значение, вызывая val->T​::​~T() нет эффекта

23.6.3.3 Assignment [optional.assign]

Таблица 38 - optional​::​operator=(optional<U>&&) эффекты
*this содержит значение*this не содержит значения
rhs содержит значение присваивает std​::​move(*rhs) содержащееся значение инициализирует значение , содержащееся как если прямая не-список-инициализацию объекта типа T с std​::​move(*rhs)
rhs не содержит значения уничтожает содержащееся значение, вызывая val->T​::​~T() нет эффекта

23.6.3.4 Swap [optional.swap]

Таблица 39 - optional​::​swap(optional&) эффекты
*this содержит значение*this не содержит значения
rhs содержит значение звонки swap(*(*this), *rhs) инициализирует содержащееся значение, *this как если бы напрямую без списка инициализирует объект типа T с выражением std​::​move(*rhs), за которым следует rhs.val->T​::​~T(); постусловие - это то, что *this содержит значение и rhs не содержит значения
rhs не содержит значения инициализирует содержащееся значение, rhs как если бы напрямую без списка инициализирует объект типа T с выражением std​::​move(*(*this)), за которым следует val->T​::​~T(); постусловие - это то, *this что не содержит значения и rhs содержит значение нет эффекта

23.15.4.1 Primary type categories [meta.unary.cat]

Таблица 40 - Предикаты категории первичного типа
ШаблонСостояниеКомментарии
template <class T>
struct is_­void;
T является void
template <class T>
struct is_­null_­pointer;
T есть nullptr_­t ( [basic.fundamental])
template <class T>
struct is_­integral;
T является integral type
template <class T>
struct is_­floating_­point;
T это floating-point type
template <class T>
struct is_­array;
T является типом массива ( [basic.compound]) известной или неизвестной степени Шаблон класса array не является типом массива.
template <class T>
struct is_­pointer;
T это pointer type Включает указатели на функции, но не указатели на нестатические члены.
template <class T>
struct is_­lvalue_­reference;
T является lvalue reference type
template <class T>
struct is_­rvalue_­reference;
T является rvalue reference type
template <class T>
struct is_­member_­object_­pointer;
T указатель на нестатический член данных
template <class T>
struct is_­member_­function_­pointer;
T указатель на нестатическую функцию-член
template <class T>
struct is_­enum;
T это перечислимый тип ( [basic.compound])
template <class T>
struct is_­union;
T тип объединения ( [basic.compound])
template <class T>
struct is_­class;
T тип класса, не являющегося объединением ( [basic.compound])
template <class T>
struct is_­function;
T это функция type ( [basic.compound])

23.15.4.2 Composite type traits [meta.unary.comp]

Таблица 41 - предикаты категории составного типа
ШаблонСостояниеКомментарии
template <class T>
struct is_­reference;
T ссылка lvalue или ссылка rvalue
template <class T>
struct is_­arithmetic;
T является arithmetic type
template <class T>
struct is_­fundamental;
T это fundamental type
template <class T>
struct is_­object;
T является object type
template <class T>
struct is_­scalar;
T это scalar type
template <class T>
struct is_­compound;
T это compound type
template <class T>
struct is_­member_­pointer;
T является указателем на нестатический член данных или нестатическую функцию-член

23.15.4.3 Type properties [meta.unary.prop]

Таблица 42 - Предикаты свойств типа
ШаблонСостояниеПредварительные условия
template <class T>
struct is_­const;
T является const-qualified
template <class T>
struct is_­volatile;
T является volatile-qualified
template <class T>
struct is_­trivial;
T это trivial type remove_­all_­extents_­t<T> должен быть полным типом или cv void.
template <class T>
struct is_­trivially_­copyable;
T это trivially copyable type remove_­all_­extents_­t<T> должен быть полным типом или cv void.
template <class T>
struct is_­standard_­layout;
T это standard-layout type remove_­all_­extents_­t<T> должен быть полным типом или cv void.
template <class T>
struct is_­pod;
T это POD type remove_­all_­extents_­t<T> должен быть полным типом или cv void.
template <class T>
struct is_­empty;
T - это тип класса, но не тип объединения, без нестатических членов данных, кроме битовых полей длины 0, без виртуальных функций-членов, без виртуальных базовых классов и без базового класса, B для которого is_­empty_­v<B> есть false. Если T тип класса, T не являющийся объединением, должен быть полным типом.
template <class T>
struct is_­polymorphic;
T это polymorphic class Если T тип класса, T не являющийся объединением, должен быть полным типом.
template <class T>
struct is_­abstract;
T является abstract class Если T тип класса, T не являющийся объединением, должен быть полным типом.
template <class T>
struct is_­final;
T - это тип класса, отмеченный class-virt-specifier final (Условием [class]). [ Note: Объединение - это тип класса, который можно пометить значком final. ] end note Если T это тип класса, он T должен быть полным типом.
template <class T>
struct is_­aggregate;
T является агрегатным типом ( [dcl.init.aggr]) remove_­all_­extents_­t<T> должен быть полным типом или cv void.
template <class T>
struct is_­signed;
Если is_­arithmetic_­v<T> есть true, тот же результат, что и T(-1) < T(0); иначе, false
template <class T>
struct is_­unsigned;
Если is_­arithmetic_­v<T> есть true, тот же результат, что и T(0) < T(-1); иначе, false
template <class T, class... Args>
struct is_­constructible;
Для типа функции T или для cv void типа T, is_­constructible_­v<T, Args...> в falseпротивном случае see below T и все типы в пакете параметров Args должны быть полными типами cv voidили массивами с неизвестной границей.
template <class T>
struct is_­default_­constructible;
is_­constructible_­v<T> есть true. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct is_­copy_­constructible;
Для a referenceable type Tтот же результат, что is_­constructible_­v<T, const T&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct is_­move_­constructible;
Для ссылочного типа Tтот же результат, что is_­constructible_­v<T, T&&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T, class U>
struct is_­assignable;
Выражение declval<T>() = declval<U>() правильно сформировано, если рассматривать его как unevaluated operand. Проверка доступа выполняется, как если бы в контексте, не связанном с T и U. Учитывается только действительность непосредственного контекста выражения присваивания. [ Note: Компиляция выражения может привести к побочным эффектам, таким как создание экземпляров специализаций шаблонов классов и специализаций шаблонов функций, создание неявно определенных функций и т. Д. Такие побочные эффекты не относятся к «непосредственному контексту» и могут привести к неправильному формированию программы. ] end note T и U должны быть полными типами cv voidили массивами с неизвестной границей.
template <class T>
struct is_­copy_­assignable;
Для ссылочного типа Tтот же результат, что is_­assignable_­v<T&, const T&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct is_­move_­assignable;
Для ссылочного типа Tтот же результат, что is_­assignable_­v<T&, T&&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T, class U>
struct is_­swappable_­with;
Каждое выражение swap(declval<T>(), declval<U>()) и swap(declval<U>(), declval<T>()) имеет правильный формат, если рассматривать его как unevaluated operand контекст разрешения перегрузки для заменяемых значений ( [swappable.requirements]). Проверка доступа выполняется, как если бы в контексте, не связанном с T и U. Учитывается только действительность непосредственного контекста swap выражений. [ Note: Компиляция выражений может привести к побочным эффектам, таким как создание экземпляров специализаций шаблонов классов и специализаций шаблонов функций, создание неявно определенных функций и т. Д. Такие побочные эффекты не относятся к «непосредственному контексту» и могут привести к неправильному формированию программы. ] end note T и U должны быть полными типами cv voidили массивами с неизвестной границей.
template <class T>
struct is_­swappable;
Для ссылочного типа Tтот же результат, что is_­swappable_­with_­v<T&, T&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct is_­destructible;
Либо T это ссылочный тип, либо T полный тип объекта, для которого выражение declval<U&>().~U() правильно сформировано при обработке как unevaluated operand, где U есть remove_­all_­extents<T>. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T, class... Args>
struct
is_­trivially_­constructible;
is_­constructible_­v<T,
Args...> is, true и известно, что определение переменной for is_­constructible, как определено ниже, не вызывает никаких нетривиальных операций ( [basic.types], [special]).
T и все типы в пакете параметров Args должны быть полными типами cv voidили массивами с неизвестной границей.
template <class T>
struct is_­trivially_­default_­constructible;
is_­trivially_­constructible_­v<T> есть true. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct is_­trivially_­copy_­constructible;
Для ссылочного типа Tтот же результат, что is_­trivially_­constructible_­v<T, const T&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct is_­trivially_­move_­constructible;
Для ссылочного типа Tтот же результат, что is_­trivially_­constructible_­v<T, T&&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T, class U>
struct is_­trivially_­assignable;
is_­assignable_­v<T, U> есть, true и известно, что присвоение, как определено is_­assignable, не вызывает никакой нетривиальной операции ( [basic.types], [special]). T и U должны быть полными типами cv voidили массивами с неизвестной границей.
template <class T>
struct is_­trivially_­copy_­assignable;
Для ссылочного типа Tтот же результат, что is_­trivially_­assignable_­v<T&, const T&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct is_­trivially_­move_­assignable;
Для ссылочного типа Tтот же результат, что is_­trivially_­assignable_­v<T&, T&&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct is_­trivially_­destructible;
is_­destructible_­v<T> есть true и указанный деструктор, как известно, тривиален. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T, class... Args>
struct is_­nothrow_­constructible;
is_­constructible_­v<T, Args...> is, true а определение переменной for is_­constructible, как определено ниже, не генерирует никаких исключений ( [expr.unary.noexcept]). T и все типы в пакете параметров Args должны быть полными типами cv voidили массивами с неизвестной границей.
template <class T>
struct is_­nothrow_­default_­constructible;
is_­nothrow_­constructible_­v<T> есть true. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct is_­nothrow_­copy_­constructible;
Для ссылочного типа Tтот же результат, что is_­nothrow_­constructible_­v<T, const T&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct is_­nothrow_­move_­constructible;
Для ссылочного типа Tтот же результат, что is_­nothrow_­constructible_­v<T, T&&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T, class U>
struct is_­nothrow_­assignable;
is_­assignable_­v<T, U> is, true и известно, что присвоение не генерирует никаких исключений ( [expr.unary.noexcept]). T и U должны быть полными типами cv voidили массивами с неизвестной границей.
template <class T>
struct is_­nothrow_­copy_­assignable;
Для ссылочного типа Tтот же результат, что is_­nothrow_­assignable_­v<T&, const T&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct is_­nothrow_­move_­assignable;
Для ссылочного типа Tтот же результат, что is_­nothrow_­assignable_­v<T&, T&&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T, class U>
struct is_­nothrow_­swappable_­with;
is_­swappable_­with_­v<T, U> is, true и известно, что каждое swap выражение определения не is_­swappable_­with<T, U> вызывает никаких исключений ( [expr.unary.noexcept]). T и U должны быть полными типами cv voidили массивами с неизвестной границей.
template <class T>
struct is_­nothrow_­swappable;
Для ссылочного типа Tтот же результат, что is_­nothrow_­swappable_­with_­v<T&, T&>и в противном случае false. T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct is_­nothrow_­destructible;
is_­destructible_­v<T> is, true и известно, что указанный деструктор не генерирует никаких исключений ( [expr.unary.noexcept]). T должен быть полным типом cv voidили массивом с неизвестной границей.
template <class T>
struct has_­virtual_­destructor;
T есть виртуальный destructor Если T тип класса, T не являющийся объединением, должен быть полным типом.
template <class T>
struct has_­unique_­object_­representations;
Для типа массива Tтот же результат, что has_­unique_­object_­representations_­v<remove_­all_­extents_­t<T>>и в противном случае see below. T должен быть полным типом cv voidили массивом с неизвестной границей.

23.15.5 Type property queries [meta.unary.prop.query]

Таблица 43 - Введите запросы свойств
ШаблонЦенить
template <class T>
struct alignment_­of;
alignof(T).
Requires: alignof(T) должно быть допустимым выражением ( [expr.alignof])
template <class T>
struct rank;
Если T именует тип массива, целочисленное значение, представляющее количество измерений T; в противном случае 0.
template <class T,
unsigned I = 0>
struct extent;
Если T это не тип массива, или если его ранг меньше или равен I, или если он I равен 0 и T имеет тип «массив с неизвестной границей U», то 0; в противном случае граница ( [dcl.array]) I'го измерения T, где индексирование отсчитывается от I нуля

23.15.6 Relationships between types [meta.rel]

Таблица 44 - Предикаты отношения типов
ШаблонСостояниеКомментарии
template <class T, class U>
struct is_­same;
T и U назовите тот же тип с одинаковыми CV-квалификациями
template <class Base, class Derived>
struct is_­base_­of;
Base является базовым классом Derived (Clause [class.derived]) без учета cv-квалификаторов или Base и Derived не является объединением и называет один и тот же тип класса без учета cv-квалификаторов Если Base и Derived являются типами класса без объединения и, возможно, не являются версиями одного и того же типа с квалификацией cv, Derived должен быть полным типом. [ Note: Базовые классы, которые являются частными, защищенными или неоднозначными, тем не менее, являются базовыми классами. ] end note
template <class From, class To>
struct is_­convertible;
see below From и To должны быть полными типами, массивами с неизвестной границей или cv void типами.
template <class Fn, class... ArgTypes>
struct is_­invocable;
Выражение INVOKE(declval<Fn>(), declval<ArgTypes>()...) правильно сформировано, когда рассматривается как неоцененный операнд Fn и все типы в пакете параметров ArgTypes должны быть полными типами cv voidили массивами с неизвестной границей.
template <class R, class Fn, class... ArgTypes>
struct is_­invocable_­r;
Выражение INVOKE<R>(declval<Fn>(), declval<ArgTypes>()...) правильно сформировано, когда рассматривается как неоцененный операнд Fn,, Rи все типы в пакете параметров ArgTypes должны быть полными типами cv voidили массивами с неизвестной границей.
template <class Fn, class... ArgTypes>
struct is_­nothrow_­invocable;
is_­invocable_­v<
Fn, ArgTypes...> есть true и выражение, INVOKE(declval<Fn>(), declval<ArgTypes>()...) как известно, не генерирует никаких исключений
Fn и все типы в пакете параметров ArgTypes должны быть полными типами cv voidили массивами с неизвестной границей.
template <class R, class Fn, class... ArgTypes>
struct is_­nothrow_­invocable_­r;
is_­invocable_­r_­v<
R, Fn, ArgTypes...> есть true и выражение, INVOKE<R>(declval<Fn>(), declval<ArgTypes>()...) как известно, не генерирует никаких исключений
Fn,, Rи все типы в пакете параметров ArgTypes должны быть полными типами cv voidили массивами с неизвестной границей.

23.15.7.1 Const-volatile modifications [meta.trans.cv]

Таблица 45 - Постоянно изменчивые модификации
ШаблонКомментарии
template <class T>
struct remove_­const;
Элемент typedef именует type тот же тип, T за исключением того, что любой константный квалификатор верхнего уровня был удален. [ Example: remove_­const_­t<const volatile int> оценивается volatile intкак, тогда как remove_­const_­t<const int*> оценивается как const int*. ] end example
template <class T>
struct remove_­volatile;
Элемент typedef именует type тот же тип, T за исключением того, что все квалификаторы volatile верхнего уровня были удалены. [ Example: remove_­volatile_­t<const volatile int> оценивается const intкак, тогда как remove_­volatile_­t<volatile int*> оценивается как volatile int*. ] end example
template <class T>
struct remove_­cv;
Элемент typedef type должен быть таким же, как T за исключением того, что любой квалификатор cv верхнего уровня был удален. [ Example: remove_­cv_­t<const volatile int> оценивается intкак, тогда как remove_­cv_­t<const volatile int*> оценивается как const volatile int*. ] end example
template <class T>
struct add_­const;
Если T это ссылка, функция или тип верхнего уровня с указанием const, тогда type именуется тот же тип, что и T, в противном случае T const.
template <class T>
struct add_­volatile;
Если T является ссылкой, функцией или типом верхнего уровня, квалифицированным с указанием изменчивости, тогда type именуется тот же тип, что и T, в противном случае T volatile.
template <class T>
struct add_­cv;
Элемент typedef type называет тот же тип, что и add_­const_­t<add_­volatile_­t<T>>.

23.15.7.2 Reference modifications [meta.trans.ref]

Таблица 46 - Справочные модификации
ШаблонКомментарии
template <class T>
struct remove_­reference;
Если T имеет тип «ссылка на T1», тогда type имена typedef члена T1; в противном случае - type имена T.
template <class T>
struct add_­lvalue_­reference;
Если T имена a, referenceable type то член typedef type names T&; в противном случае - type имена T. [ Note: Это правило отражает семантику свертывания ссылок ( [dcl.ref]). ] end note
template <class T>
struct add_­rvalue_­reference;
Если T именует Referenceable типа , то члены ЬурейеГо type имен T&&; в противном случае - type имена T. [ Note: Это правило отражает семантику свертывания ссылок ( [dcl.ref]). Например, когда тип T называет тип T1&, этот тип add_­rvalue_­reference_­t<T> не является ссылкой rvalue. ] end note

23.15.7.3 Sign modifications [meta.trans.sign]

Таблица 47 - Модификации знаков
ШаблонКомментарии
template <class T>
struct make_­signed;
Если T именует a (возможно, cv-квалифицированным), signed integer type тогда typedef члена type называет тип T; в противном случае, если T именуется (возможно, cv-квалифицированный) беззнаковый целочисленный тип, тогда type именуется соответствующий знаковый целочисленный тип с теми же cv-квалификаторами, что и T; в противном случае, type именует знаковое целое типа с , smallest rank для которых sizeof(T) == sizeof(type), с тем же CV-определителями как T.
Requires: T должен быть (возможно, cv-квалифицированным) целочисленным типом или перечислением, но не bool типом.
template <class T>
struct make_­unsigned;
Если T именует a (возможно, cv-квалифицированным), unsigned integer type тогда typedef члена type называет тип T; в противном случае, если T именуется (возможно, cv-квалифицированный) целочисленный тип со знаком, тогда type именуется соответствующий беззнаковый целочисленный тип с теми же cv-квалификаторами, что и T; в противном случае, type называют целое число без знака типа с , smallest rank для которого sizeof(T) == sizeof(type), с тем же CV-классификаторами как T.
Requires: T должен быть (возможно, cv-квалифицированным) целочисленным типом или перечислением, но не bool типом.

23.15.7.4 Array modifications [meta.trans.arr]

Таблица 48 - Модификации массива
ШаблонКомментарии
template <class T>
struct remove_­extent;
Если T тип именуется «массив из U», то в противном случае type должен быть член typedef . [ Для многомерных массивов удаляется только первое измерение массива. Для типа «массив » результирующий тип будет . ] U TNote: const U const U end note
template <class T>
struct remove_­all_­extents;
Если T это «многомерный массив из U», результирующий typedef члена type будет U, в противном случае T.

23.15.7.5 Pointer modifications [meta.trans.ptr]

Таблица 49 - Модификации указателя
ШаблонКомментарии
template <class T>
struct remove_­pointer;
Если T имеет тип «(возможно , резюме квалифицированное) указатель T1» затем член ЬурейеГо type имен T1; в противном случае это имена T.
template <class T>
struct add_­pointer;
Если T называет тип referenceable type или cv void тип, то член typedef type называет тот же тип, что и remove_­reference_­t<T>*; в противном случае - type имена T.

23.15.7.6 Other transformations [meta.trans.other]

Таблица 50 - Прочие преобразования
ШаблонКомментарии
template <size_­t Len,
size_­t Align
= default-alignment>
struct aligned_­storage;
Значение default-alignment должно быть наиболее строгим требованием к выравниванию для любого типа объекта C ++, размер которого не превышает Len ( [basic.types]). Член typedef type должен быть типом POD, подходящим для использования в качестве неинициализированного хранилища для любого объекта, размер которого не больше, Len а выравнивание является делителем Align.
Requires: Len не должно быть нулевым. Align должен быть равен alignof(T) для некоторого типа T или to default-alignment.
template <size_­t Len,
class... Types>
struct aligned_­union;
Элемент typedef type должен быть типом POD, подходящим для использования в качестве неинициализированного хранилища для любого объекта, тип которого указан в Types; его размер должен быть не менее Len. Статический член alignment_­value должен быть интегральной константой типа size_­t , значение которого является самым строгим выравниванием из всех типов, перечисленных в Types.
Requires: Предусмотрен хотя бы один тип.
template <class T>
struct decay;
Пусть U будет remove_­reference_­t<T>. Если is_­array_­v<U> есть true, то член typedef type должен быть равен remove_­extent_­t<U>*. Если is_­function_­v<U> есть true, то член typedef type должен быть равен add_­pointer_­t<U>. В противном случае typedef члена type равен remove_­cv_­t<U>. [ Note: Это поведение похоже на lvalue-to-rvalue, array-to-pointerи function-to-pointer преобразование применяется , когда выражение - значения используется в качестве RValue, но и полоска cv-qualifiers от типов классов , с тем чтобы более точно моделями по значению передачи аргументов. ] end note
template <bool B, class T = void> struct enable_­if; Если B есть true, то член typedef type должен быть равен T; в противном случае член не должен быть type.
template <bool B, class T, class F>
struct conditional;
Если B есть true, то член typedef type должен быть равен T. Если B есть false, то член typedef type должен быть равен F.
template <class... T> struct common_­type; Если этот признак не является специализированным (как указано в примечании B ниже), член type должен быть определен или опущен, как указано в примечании A ниже. Если он опущен, член не должен быть type. Каждый тип в пакете параметров T должен быть полным cv voidили массивом с неизвестными границами.
template <class T>
struct underlying_­type;
Элемент typedef type называет базовый тип T.
Requires: T должен быть полным enumeration type
template <class Fn,
class... ArgTypes>
struct invoke_­result;
Если выражение INVOKE(declval<Fn>(), declval<ArgTypes>()...) правильно сформировано при обработке как выражение unevaluated operand, typedef члена type называет тип decltype(INVOKE(declval<Fn>(), declval<ArgTypes>()...)); в противном случае член не должен быть type. Проверка доступа выполняется, как если бы в контексте, не связанном с Fn и ArgTypes. Учитывается только действительность непосредственного контекста выражения. [ Note: Компиляция выражения может привести к побочным эффектам, таким как создание экземпляров специализаций шаблонов классов и специализаций шаблонов функций, создание неявно определенных функций и т. Д. Такие побочные эффекты не относятся к «непосредственному контексту» и могут привести к неправильному формированию программы. ] и все типы в пакете параметров должны быть полными типами или массивами с неизвестной границей. end note
Requires: Fn ArgTypes cv void

23.16.4 Arithmetic on ratios [ratio.arithmetic]

Таблица 51 - Выражения, используемые для выполнения арифметики отношений
ТипЗначение XЗначение Y
ratio_­add<R1, R2> R1​::​num * R2​::​den + R1​::​den * R2​::​den
R2​::​num * R1​::​den
ratio_­subtract<R1, R2> R1​::​num * R2​::​den - R1​::​den * R2​::​den
R2​::​num * R1​::​den
ratio_­multiply<R1, R2> R1​::​num * R2​::​num R1​::​den * R2​::​den
ratio_­divide<R1, R2> R1​::​num * R2​::​den R1​::​den * R2​::​num

23.17.3 Clock requirements [time.clock.req]

Таблица 52 - Требования к часам
ВыражениеТип возвратаОперационная семантика
C1​::​rep Арифметический тип или класс, имитирующий арифметический тип Тип представления C1​::​duration.
C1​::​period специализация ratio Период тика часов в секундах.
C1​::​duration chrono​::​duration<C1​::​rep, C1​::​period> duration Тип часов.
C1​::​time_­point chrono​::​time_­point<C1> или chrono​::​time_­point<C2, C1​::​duration> time_­point Тип часов. C1 и C2 будет относиться к той же эпохе.
C1​::​is_­steady const bool true если t1 <= t2 всегда, true а время между тактами часов постоянно, в противном случае false.
C1​::​now() C1​::​time_­point Возвращает time_­point объект, представляющий текущий момент времени.

24.1 General [strings.general]

Таблица 53 - Сводка библиотеки строк
Подпункт Заголовок (ы)
[char.traits] Черты характера <string>
[string.classes] Строковые классы <string>
[string.view] Классы строковых представлений <string_­view>
<cctype>
<cwctype>
[c.strings] Утилиты для последовательностей с нулевым завершением <cstring>
<cwchar>
<cstdlib>
<cuchar>

24.2.1 Character traits requirements [char.traits.require]

Таблица 54 - Требования к характеристикам персонажей
ВыражениеТип возвратаУтверждение / примечаниеСложность
до / после состояния
X​::​char_­type charT (описано в [char.traits.typedefs]) время компиляции
X​::​int_­type (описано в [char.traits.typedefs]) время компиляции
X​::​off_­type (описано в [char.traits.typedefs]) время компиляции
X​::​pos_­type (описано в [char.traits.typedefs]) время компиляции
X​::​state_­type (описано в [char.traits.typedefs]) время компиляции
X​::​eq(c,d) bool Returns: следует ли c рассматривать как равное d. постоянный
X​::​lt(c,d) bool Returns: следует ли c рассматривать как меньшее, чем d. постоянный
X​::​compare(p,q,n) int Returns: 0 если для каждого i в [0,n), X​::​eq(p[i],q[i]) есть true; иначе, отрицательное значение , если для некоторых j ин [0,n), X​::​lt(p[j],q[j]) это true и для каждого i дюйма [0,j) X​::​eq(p[i],q[i]) является true; иначе положительное значение. линейный
X​::​length(p) size_­t Returns: самый маленький i такой что X​::​eq(p[i],charT()) есть true. линейный
X​::​find(p,n,c) const X​::​char_­type* Returns: наименьшее q в [p,p+n) таком, то X​::​eq(*q,c) есть true, в противном случае ноль. линейный
X​::​move(s,p,n) X​::​char_­type* для каждого i в [0,n), выполняет X​::​assign(s[i],p[i]). Копирует правильно даже там, где диапазоны [p,p+n) и [s,s+n) перекрываются.
Returns: s.
линейный
X​::​copy(s,p,n) X​::​char_­type* Requires: p не в [s,s+n). Returns: s.
для каждого i в [0,n), выполняет X​::​assign(s[i],p[i]).
линейный
X​::​assign(r,d) (не используется) назначает r=d. постоянный
X​::​assign(s,n,c) X​::​char_­type* для каждого i в [0,n), выполняет X​::​assign(s[i],c).
Returns: s.
линейный
X​::​not_­eof(e) int_­type Returns: e если X​::​eq_­int_­type(e,X​::​eof()) есть false, в противном случае такое значение f , которое X​::​eq_­int_­type(f,X​::​eof()) есть false. постоянный
X​::​to_­char_­type(e) X​::​char_­type Returns: если для некоторых c, X​::​eq_­int_­type(e,X​::​to_­int_­type(c)) это true, c; иначе какое-то неопределенное значение. постоянный
X​::​to_­int_­type(c) X​::​int_­type Returns: некоторая ценность e, ограниченная определениями to_­char_­type и eq_­int_­type. постоянный
X​::​eq_­int_­type(e,f) bool Returns: для всех c и d, X​::​eq(c,d) равно X​::​eq_­int_­type(X​::​to_­int_­type(c), X​::​to_­int_­type(d)); в противном случае выдает true if e и f обе копии X​::​eof(); в противном случае уступает, false если одно из e и f является копией, X​::​eof() а другое - нет; в противном случае значение не указано. постоянный
X​::​eof() X​::​int_­type Returns: такое значение e , которое X​::​eq_­int_­type(e,X​::​to_­int_­type(c)) есть false для всех значений c. постоянный

24.3.2.2 basic_­string constructors and assignment operators [string.cons]

Таблица 55 - basic_­string(const Allocator&) эффекты
ЭлементЦенить
data() ненулевой указатель, который можно копировать и к нему можно добавить 0
size() 0
capacity() неуказанное значение

24.3.2.2 basic_­string constructors and assignment operators [string.cons]

Таблица 56 - basic_­string(const basic_­string&) эффекты
ЭлементЦенить
data() указывает на первый элемент выделенной копии массива, на первый элемент которого указывает str.data()
size() str.size()
capacity() значение, по крайней мере, такое большое, как size()

24.3.2.2 basic_­string constructors and assignment operators [string.cons]

Таблица 57 - и эффекты basic_­string(const basic_­string&, size_­type, const Allocator&)
basic_­string(const basic_­string&, size_­type, size_­type, const Allocator&)
ЭлементЦенить
data() указывает на первый элемент выделенной копии rlen последовательных элементов строки, управляемой str начиная с позиции pos
size() rlen
capacity() значение, по крайней мере, такое большое, как size()

24.3.2.2 basic_­string constructors and assignment operators [string.cons]

Таблица 58 - basic_­string(const charT*, size_­type, const Allocator&) эффекты
ЭлементЦенить
data() указывает на первый элемент выделенной копии массива, на первый элемент которого указывает s
size() n
capacity() значение, по крайней мере, такое большое, как size()

24.3.2.2 basic_­string constructors and assignment operators [string.cons]

Таблица 59 - basic_­string(const charT*, const Allocator&) эффекты
ЭлементЦенить
data() указывает на первый элемент выделенной копии массива, на первый элемент которого указывает s
size() traits​::​length(s)
capacity() значение, по крайней мере, такое большое, как size()

24.3.2.2 basic_­string constructors and assignment operators [string.cons]

Таблица 60 - basic_­string(size_­t, charT, const Allocator&) эффекты
ЭлементЦенить
data() указывает на первый элемент выделенного массива n элементов, каждый из которых хранит начальное значение c
size() n
capacity() значение, по крайней мере, такое большое, как size()

24.3.2.2 basic_­string constructors and assignment operators [string.cons]

Таблица 61 - и эффекты basic_­string(const basic_­string&, const Allocator&)
basic_­string(basic_­string&&, const Allocator&)
ЭлементЦенить
data() указывает на первый элемент выделенной копии массива, на первый элемент которого указывает исходное значение str.data().
size() первоначальная стоимость str.size()
capacity() значение, по крайней мере, такое большое, как size()
get_­allocator() alloc

24.3.2.2 basic_­string constructors and assignment operators [string.cons]

Таблица 62 - operator=(const basic_­string&) эффекты
ЭлементЦенить
data() указывает на первый элемент выделенной копии массива, на первый элемент которого указывает str.data()
size() str.size()
capacity() значение, по крайней мере, такое большое, как size()

24.3.2.7.9 basic_­string​::​compare [string.compare]

Таблица 63 - compare() результаты
СостояниеВозвращаемое значение
size() <  sv.size() < 0
size() == sv.size()  0
size() >  sv.size() > 0

24.4.2.1 Construction and assignment [string.view.cons]

Таблица 64 - basic_­string_­view(const charT*) эффекты
ЭлементЦенить
data_­ str
size_­ traits​::​length(str)

24.4.2.1 Construction and assignment [string.view.cons]

Таблица 65 - basic_­string_­view(const charT*, size_­type) эффекты
ЭлементЦенить
data_­ str
size_­ len

24.4.2.6 String operations [string.view.ops]

Таблица 66 - compare() результаты
СостояниеВозвращаемое значение
size() < str.size() < 0
size() == str.size()  0
size() > str.size() > 0

24.4.3 Non-member comparison functions [string.view.comparison]

Таблица 67 - Дополнительные basic_­string_­view перегрузки для сравнения
ВыражениеЭквивалентно
t == sv S(t) == sv
sv == t sv == S(t)
t != sv S(t) != sv
sv != t sv != S(t)
t < sv S(t) < sv
sv < t sv < S(t)
t > sv S(t) > sv
sv > t sv > S(t)
t <= sv S(t) <= sv
sv <= t sv <= S(t)
t >= sv S(t) >= sv
sv >= t sv >= S(t)

25.1 General [localization.general]

Таблица 68 - Сводная информация о библиотеке локализации
Подпункт Заголовок (ы)
[locales] Locales <locale>
[locale.categories] Стандартные locale категории
[c.locales] Языковые стандарты библиотеки C <clocale>

25.3.1.1.1 Type locale​::​category [locale.category]

Таблица 69 - аспекты категории языкового стандарта
КатегорияВключает грани
сопоставлять collate<char>, collate<wchar_­t>
ctype ctype<char>, ctype<wchar_­t>
codecvt<char, char, mbstate_­t>
codecvt<char16_­t, char, mbstate_­t>
codecvt<char32_­t, char, mbstate_­t>
codecvt<wchar_­t, char, mbstate_­t>
денежный moneypunct<char>, moneypunct<wchar_­t>
moneypunct<char, true>, moneypunct<wchar_­t, true>
money_­get<char>, money_­get<wchar_­t>
money_­put<char>, money_­put<wchar_­t>
числовой numpunct<char>, numpunct<wchar_­t>
num_­get<char>, num_­get<wchar_­t>
num_­put<char>, num_­put<wchar_­t>
время time_­get<char>, time_­get<wchar_­t>
time_­put<char>, time_­put<wchar_­t>
Сообщения messages<char>, messages<wchar_­t>

25.3.1.1.1 Type locale​::​category [locale.category]

Таблица 70 - Необходимые специализации
КатегорияВключает грани
сопоставлять collate_­byname<char>, collate_­byname<wchar_­t>
ctype ctype_­byname<char>, ctype_­byname<wchar_­t>
codecvt_­byname<char, char, mbstate_­t>
codecvt_­byname<char16_­t, char, mbstate_­t>
codecvt_­byname<char32_­t, char, mbstate_­t>
codecvt_­byname<wchar_­t, char, mbstate_­t>
денежный moneypunct_­byname<char, International>
moneypunct_­byname<wchar_­t, International>
money_­get<C, InputIterator>
money_­put<C, OutputIterator>
числовой numpunct_­byname<char>, numpunct_­byname<wchar_­t>
num_­get<C, InputIterator>, num_­put<C, OutputIterator>
время time_­get<char, InputIterator>
time_­get_­byname<char, InputIterator>
time_­get<wchar_­t, InputIterator>
time_­get_­byname<wchar_­t, InputIterator>
time_­put<char, OutputIterator>
time_­put_­byname<char, OutputIterator>
time_­put<wchar_­t, OutputIterator>
time_­put_­byname<wchar_­t, OutputIterator>
Сообщения messages_­byname<char>, messages_­byname<wchar_­t>

25.4.1.4.2 codecvt virtual functions [locale.codecvt.virtuals]

Таблица 71 - do_­in/do_­out значения результатов
ЦенитьИмея в виду
ok завершил преобразование
partial не все исходные символы преобразованы
error обнаружил символ, [from, from_­end) который не может преобразовать
noconv internT и externT одного типа, а входная последовательность идентична преобразованной последовательности

25.4.1.4.2 codecvt virtual functions [locale.codecvt.virtuals]

Таблица 72 - do_­unshift значения результатов
ЦенитьИмея в виду
ok завершил последовательность
partial пространство для более чем to_­end - to целевых элементов требовалось для завершения последовательности с учетом значения state
error произошла неопределенная ошибка
noconv для этого не требуется прекращения state_­type

25.4.2.1.2 num_­get virtual functions [facet.num.get.virtuals]

Таблица 73 - Целочисленные преобразования
Состояние stdio эквивалент
basefield == oct %o
basefield == hex %X
basefield == 0 %i
signed интегральный тип %d
unsigned интегральный тип %u

25.4.2.1.2 num_­get virtual functions [facet.num.get.virtuals]

Таблица 74 - модификатор длины
Тип Модификатор длины
short h
unsigned short h
long l
unsigned long l
long long ll
unsigned long long ll
double l
long double L

25.4.2.2.2 num_­put virtual functions [facet.num.put.virtuals]

Таблица 75 - Целочисленные преобразования
Состояние stdio эквивалент
basefield == ios_­base​::​oct %o
(basefield == ios_­base​::​hex) && !uppercase %x
(basefield == ios_­base​::​hex) %X
для signed целого типа %d
для unsigned целого типа %u

25.4.2.2.2 num_­put virtual functions [facet.num.put.virtuals]

Таблица 76 - Преобразования с плавающей запятой
Состояние stdio эквивалент
floatfield == ios_­base​::​fixed %f
floatfield == ios_­base​::​scientific && !uppercase %e
floatfield == ios_­base​::​scientific %E
floatfield == (ios_­base​::​fixed | ios_­base​::​scientific) && !uppercase %a
floatfield == (ios_­base​::​fixed | ios_­base​::​scientific) %A
!uppercase %g
otherwise %G

25.4.2.2.2 num_­put virtual functions [facet.num.put.virtuals]

Таблица 77 - модификатор длины
Тип Модификатор длины
long l
long long ll
unsigned long l
unsigned long long ll
long double L
otherwise none

25.4.2.2.2 num_­put virtual functions [facet.num.put.virtuals]

Таблица 78 - Числовые преобразования
Тип (ы)Состояние stdio эквивалент
интегральный тип showpos +
showbase #
тип с плавающей запятой showpos +
showpoint #

25.4.2.2.2 num_­put virtual functions [facet.num.put.virtuals]

Таблица 79 - заполнение заполнения
СостояниеМесто нахождения
adjustfield == ios_­base​::​left подушечка после
adjustfield == ios_­base​::​right колодка перед
adjustfield == internal и знак встречается в представлении блокнот после знака
adjustfield == internal и представление после этапа 1 началось с 0x или 0X проложить после x или X
otherwise колодка перед

25.4.5.1.2 time_­get virtual functions [locale.time.get.virtuals]

Таблица 80 - do_­get_­date эффекты
date_­order()Формат
no_­order "%m%d%y"
dmy "%d%m%y"
mdy "%m%d%y"
ymd "%y%m%d"
ydm "%y%d%m"

25.5.1 Header <clocale> synopsis [clocale.syn]

Таблица 81 - Возможные расхождения setlocale данных
fprintf isprint iswdigit localeconv tolower
fscanf ispunct iswgraph mblen toupper
isalnum isspace iswlower mbstowcs towlower
isalpha isupper iswprint mbtowc towupper
isblank iswalnum iswpunct setlocale wcscoll
iscntrl iswalpha iswspace strcoll wcstod
isdigit iswblank iswupper strerror wcstombs
isgraph iswcntrl iswxdigit strtod wcsxfrm
islower iswctype isxdigit strxfrm wctomb

26.1 General [containers.general]

Таблица 82 - Сводка библиотеки контейнеров
Подпункт Заголовок (ы)
[container.requirements] Требования
[sequences] Контейнеры последовательности <array>
<deque>
<forward_­list>
<list>
<vector>
[associative] Ассоциативные контейнеры <map>
<set>
[unord] Неупорядоченные ассоциативные контейнеры <unordered_­map>
<unordered_­set>
[container.adaptors] Адаптеры для контейнеров <queue>
<stack>

26.2.1 General container requirements [container.requirements.general]

Таблица 83 - Требования к контейнерам
ВыражениеТип возвратаОперативныйУтверждение / примечаниеСложность
семантикадо / после состояния
X​::​value_­type T Requires:  T это Erasable от X (см [container.requirements.general], ниже) время компиляции
X​::​reference T& время компиляции
X​::​const_­reference const T& время компиляции
X​::​iterator тип итератора, тип значения которого T любая категория итераторов, отвечающая требованиям прямого итератора. конвертируемый в X​::​const_­iterator. время компиляции
X​::​const_­iterator постоянный тип итератора, тип значения которого T любая категория итераторов, отвечающая требованиям прямого итератора. время компиляции
X​::​difference_­type знаковый целочисленный тип идентичен типу разницы X​::​iterator и X​::​const_­iterator время компиляции
X​::​size_­type беззнаковый целочисленный тип size_­type может представлять любое неотрицательное значение difference_­type время компиляции
X u; Postconditions: u.empty() постоянный
X() Postconditions: X().empty() постоянный
X(a) Requires: T находится CopyInsertable в X (см. ниже).
Postconditions: a == X(a).
линейный
X u(a);
X u = a;
Requires: T находится CopyInsertable в X (см. ниже).
Postconditions: u == a
линейный
X u(rv);
X u = rv;
Postconditions: u будет равняться значению, которое rv имело до этого строительства (Примечание B)
a = rv X& Все существующие элементы a либо перемещаются, либо уничтожаются. a должно быть равно значению, которое rv имело до этого присвоения линейный
(&a)->~X() void деструктор применяется к каждому элементу a; любая полученная память освобождается. линейный
a.begin() iterator; const_­iterator для постоянного a постоянный
a.end() iterator; const_­iterator для постоянного a постоянный
a.cbegin() const_­iterator const_­cast<​X const&​>(a)​.begin(); постоянный
a.cend() const_­iterator const_­cast<​X const&​>(a)​.end(); постоянный
a == b конвертируемый в bool == является отношением эквивалентности. equal(​a.begin(), a.end(), b.begin(), b.end()) Requires:  T является EqualityComparable Постоянно, если a.size() != b.size(), линейно в противном случае
a != b конвертируемый в bool Эквивалентно !(a == b) линейный
a.swap(b) void обменивается содержимым a и b (Примечание А)
swap(a, b) void a.swap(b) (Примечание А)
r = a X& Postconditions: r == a. линейный
a.size() size_­type distance(​a.begin(), a.end()) постоянный
a.max_­size() size_­type distance(​begin(), end()) для максимально возможного контейнера постоянный
a.empty() конвертируемый в bool a.begin() == a.end() постоянный

26.2.1 General container requirements [container.requirements.general]

Таблица 84 - Требования к двусторонним контейнерам
ВыражениеТип возвратаУтверждение / примечаниеСложность
до / после состояния
X​::​reverse_­iterator тип итератора, тип значения которого T reverse_­iterator<iterator> время компиляции
X​::​const_­reverse_­iterator постоянный тип итератора, тип значения которого T reverse_­iterator<const_­iterator> время компиляции
a.rbegin() reverse_­iterator; const_­reverse_­iterator для постоянного a reverse_­iterator(end()) постоянный
a.rend() reverse_­iterator; const_­reverse_­iterator для постоянного a reverse_­iterator(begin()) постоянный
a.crbegin() const_­reverse_­iterator const_­cast<X const&>(a).rbegin() постоянный
a.crend() const_­reverse_­iterator const_­cast<X const&>(a).rend() постоянный

26.2.1 General container requirements [container.requirements.general]

Таблица 85 - Необязательные контейнерные операции
ВыражениеТип возвратаОперативныйУтверждение / примечаниеСложность
семантикадо / после состояния
a < b конвертируемый в bool lexicographical_­compare( a.begin(), a.end(), b.begin(), b.end()) Requires: < определяется для значений T. < это отношения полного порядка. линейный
a > b конвертируемый в bool b < a линейный
a <= b конвертируемый в bool !(a > b) линейный
a >= b конвертируемый в bool !(a < b) линейный

26.2.1 General container requirements [container.requirements.general]

Таблица 86 - Требования к контейнерам с учетом распределителя
ВыражениеТип возвратаУтверждение / примечаниеСложность
до / после состояния
allocator_­type A Requires: allocator_­type​::​value_­type то же самое, что и X​::​value_­type. время компиляции
get_­- allocator() A постоянный
X()
X u;
Requires:  A есть DefaultConstructible.
Postconditions: u.empty() возвращается true, u.get_­allocator() == A()
постоянный
X(m) Postconditions: u.empty() возвращается true, постоянный
X u(m); u.get_­allocator() == m
X(t, m)
X u(t, m);
Requires:  T находится CopyInsertable в X.
Postconditions: u == t, u.get_­allocator() == m
линейный
X(rv)
X u(rv);
Postconditions: u должен иметь те же элементы, что rv и до этого строительства; значение u.get_­allocator() должно быть таким же, как значение rv.get_­allocator() до этого строительства. постоянный
X(rv, m)
X u(rv, m);
Requires:  T находится MoveInsertable в X.
Postconditions: u должны иметь те же элементы или копии элементов, которые rv были до этого строительства, u.get_­allocator() == m
постоянная, если m == rv.get_­allocator(), в противном случае линейная
a = t X& Requires:  T находится CopyInsertable в X и CopyAssignable.
Postconditions: a == t
линейный
a = rv X& Requires:  Если есть , это в и . Все существующие элементы либо передаются, либо уничтожаются. будет равно значению, которое имело до этого присвоения. allocator_­-
traits<allocator_­type>
​::​propagate_­on_­container_­-
move_­assignment​::​value
false T MoveInsertable X MoveAssignable a
Postconditions: a rv
линейный
a.swap(b) void обменивается содержимым a и b постоянный

26.2.3 Sequence containers [sequence.reqmts]

Таблица 87 - Требования к контейнеру последовательности (в дополнение к контейнеру)
ВыражениеТип возвратаУтверждение / примечание
до / после состояния
X(n, t)
X u(n, t);
Requires:  T должен быть CopyInsertable в X. Создает контейнер последовательности с копиями
Postconditions: distance(begin(), end()) == n
n t
X(i, j)
X u(i, j);
Requires:  T должен быть EmplaceConstructible в X от *i. Ибо vector, если итератор не соответствует forward iterator requirements, T также должен быть MoveInsertable включен X. Каждый итератор в диапазоне [i, j) должен быть разыменован ровно один раз. Создает контейнер последовательности, равный диапазону
Postconditions: distance(begin(), end()) == distance(i, j)
[i, j)
X(il) Эквивалентно X(il.begin(), il.end())
a = il X& Requires:  T находится CopyInsertable в X и CopyAssignable. Назначает диапазон [il.begin(), il.end()) в a. Все существующие элементы a либо присваиваются, либо уничтожаются.
Returns:  *this.
a.emplace(p, args) iterator Requires:  T находится EmplaceConstructible в X от args. Для vector и deque, T также MoveInsertable в X и MoveAssignable. Effects:  Вставляет объект типа, созданного T с помощью std​::​forward<​Args​>(​args)... before p.
a.insert(p,t) iterator Requires:  T должен быть CopyInsertable в X. Для vector и deque, T также должно быть CopyAssignable.
Effects:  Вставляет копию t ранее p.
a.insert(p,rv) iterator Requires:  T должен быть MoveInsertable в X. Для vector и deque, T также должно быть MoveAssignable.
Effects:  Вставляет копию rv ранее p.
a.insert(p,n,t) iterator Requires:  T должны быть CopyInsertable в X и CopyAssignable.
Вставляет n копии t ранее p.
a.insert(p,i,j) iterator Requires:  T должен быть EmplaceConstructible в X от *i. Для vector и deque, T должен также быть MoveInsertable в X, MoveConstructible, MoveAssignable, и swappable. Каждый итератор в диапазоне [i, j) должен быть разыменован ровно один раз.
Requires: i и j не являются итераторами a.
Вставляет копии элементов [i, j) перед p
a.insert(p, il) iterator a.insert(p, il.begin(), il.end()).
a.erase(q) iterator Requires:  Для vector и deque, T должно быть MoveAssignable.
Effects:  Удаляет элемент, на который указывает q.
a.erase(q1,q2) iterator Requires:  Для vector и deque, T должно быть MoveAssignable.
Effects:  Стирает элементы в диапазоне [q1, q2).
a.clear() void Уничтожает все элементы в a. Делает недействительными все ссылки, указатели и итераторы, относящиеся к элементам, a и может сделать недействительным итератор, прошедший за конец.
Postconditions: a.empty() возвращается true.
Complexity: Линейный.
a.assign(i,j) void Requires:  T должно быть EmplaceConstructible в X от *i и может быть назначено от *i. Ибо vector, если итератор не соответствует forward iterator requirements, T также должен быть MoveInsertable включен X.
Каждый итератор в диапазоне [i, j) должен быть разыменован ровно один раз.
Requires: i, j не являются итераторами в a.
Заменяет элементы в a копии [i, j).
Делает недействительными все ссылки, указатели и итераторы, относящиеся к элементам a. Для vector и dequeтакже делает недействительным итератор, прошедший за конец.
a.assign(il) void a.assign(il.begin(), il.end()).
a.assign(n,t) void Requires:  T должны быть CopyInsertable в X и CopyAssignable.
Requires: t это не ссылка на a.
Заменяет элементы a с n копиями t.
Делает недействительными все ссылки, указатели и итераторы, относящиеся к элементам a. Для vector и dequeтакже делает недействительным итератор, прошедший за конец.

26.2.3 Sequence containers [sequence.reqmts]

Таблица 88 - Операции контейнера необязательной последовательности
ВыражениеТип возвратаОперационная семантикаКонтейнер
a.front() reference; const_­reference для постоянного a *a.begin() basic_­string, array, deque, forward_­list, list, vector
a.back() reference; const_­reference для постоянного a { auto tmp = a.end();
--tmp;
return *tmp; }
basic_­string, array, deque, list, vector
a.emplace_­front(args) reference Добавляет объект типа, созданный T с помощью std​::​forward<​Args​>(​args)....
Requires:  T должен быть EmplaceConstructible в X от args.
Returns: a.front().
deque, forward_­list, list
a.emplace_­back(args) reference Добавляет объект типа, созданного T с помощью std​::​forward<​Args​>(​args)....
Requires:  T должен быть EmplaceConstructible в X от args. Для vector, T также должны быть MoveInsertable в X.
Returns: a.back().
deque, list, vector
a.push_­front(t) void Готовит копию t.
Requires:  T должен быть CopyInsertable в X.
deque, forward_­list, list
a.push_­front(rv) void Готовит копию rv.
Requires:  T должен быть MoveInsertable в X.
deque, forward_­list, list
a.push_­back(t) void Добавляет копию t.
Requires:  T должен быть CopyInsertable в X.
basic_­string, deque, list, vector
a.push_­back(rv) void Добавляет копию rv.
Requires:  T должен быть MoveInsertable в X.
basic_­string, deque, list, vector
a.pop_­front() void Уничтожает первый элемент.
Requires:  a.empty() будет false.
deque, forward_­list, list
a.pop_­back() void Уничтожает последний элемент.
Requires:  a.empty() будет false.
basic_­string, deque, list, vector
a[n] reference; const_­reference для постоянного a *(a.begin() + n) basic_­string, array, deque, vector
a.at(n) reference; const_­reference для постоянного a *(a.begin() + n) basic_­string, array, deque, vector

26.2.4.1 node_­handle overview [container.node.overview]

Таблица 89 - Типы контейнеров с совместимыми узлами
map<K, T, C1, A> map<K, T, C2, A>
map<K, T, C1, A> multimap<K, T, C2, A>
set<K, C1, A> set<K, C2, A>
set<K, C1, A> multiset<K, C2, A>
unordered_­map<K, T, H1, E1, A> unordered_­map<K, T, H2, E2, A>
unordered_­map<K, T, H1, E1, A> unordered_­multimap<K, T, H2, E2, A>
unordered_­set<K, H1, E1, A> unordered_­set<K, H2, E2, A>
unordered_­set<K, H1, E1, A> unordered_­multiset<K, H2, E2, A>

26.2.6 Associative containers [associative.reqmts]

Таблица 90 - Требования к ассоциативному контейнеру (в дополнение к контейнеру)
ВыражениеТип возвратаУтверждение / примечаниеСложность
до / после состояния
X​::​key_­type Key время компиляции
X​::​mapped_­type ( map и multimap только) T время компиляции
X​::​value_­type ( set и multiset только) Key Requires:  value_­type это Erasable из X время компиляции
X​::​value_­type ( map и multimap только) pair<const Key, T> Requires:  value_­type это Erasable из X время компиляции
X​::​key_­compare Compare Requires:  key_­compare есть CopyConstructible. время компиляции
X​::​value_­compare бинарный тип предиката то же самое, что и key_­compare для set и multiset; является отношением порядка на парах, индуцированным первой компонентой (т. е. Key) для map и multimap. время компиляции
X​::​node_­type специализация node_­handle шаблона класса, так что общедоступные вложенные типы являются теми же типами, что и соответствующие типы в X. видеть [container.node] время компиляции
X(c)
X u(c);
Effects:  Создает пустой контейнер. Использует копию c как объект сравнения. постоянный
X()
X u;
Requires:  key_­compare есть DefaultConstructible.
Effects:  Создает пустой контейнер. Используется Compare() как объект сравнения
постоянный
X(i,j,c)
X u(i,j,c);
Requires:  value_­type находится EmplaceConstructible в X от *i.
Effects:  Создает пустой контейнер и вставляет в него элементы из диапазона [i, j) ; используется c как объект сравнения.
NlogN в общем, где N имеет значение distance(i, j); линейный, если [i, j) отсортировано с помощью value_­comp()
X(i,j)
X u(i,j);
Requires:  key_­compare есть DefaultConstructible. value_­type находится EmplaceConstructible в X от *i.
Effects:  То же, что и выше, но используется Compare() как объект сравнения.
то же, что и выше
X(il) такой же как X(il.begin(), il.end()) такой же как X(il.begin(), il.end())
X(il,c) такой же как X(il.begin(), il.end(), c) такой же как X(il.begin(), il.end(), c)
a = il X& Requires:  value_­type находится CopyInsertable в X и CopyAssignable.
Effects: Назначает диапазон [il.begin(), il.end()) в a. Все существующие элементы a либо присваиваются, либо уничтожаются.
NlogN в общем, где N имеет значение il.size() + a.size(); линейный, если [il.begin(), il.end()) отсортировано с помощью value_­comp()
b.key_­comp() X​::​key_­compare возвращает объект сравнения, из которого b был построен. постоянный
b.value_­comp() X​::​value_­compare возвращает объект, value_­compare созданный из объекта сравнения постоянный
a_­uniq.​emplace(​args) pair<​iterator, bool> Requires:  value_­type должен быть EmplaceConstructible в X от args.
Effects:  Вставляет value_­type объект, t созданный с помощью std​::​forward<​Args​>(​args)... if и только если в контейнере нет элемента с ключом, эквивалентным ключу t. bool Компонент возвращаемой пары true тогда и только тогда , когда имеет место вставка, а итератор компонент из точек пары к элементу с ключом , эквивалентным ключом t.
логарифмический
a_­eq.​emplace(​args) iterator Requires:  value_­type должен быть EmplaceConstructible в X от args.
Effects:  Вставляет value_­type объект, созданный t с помощью, std​::​forward<​Args​>(​args)... и возвращает итератор, указывающий на вновь вставленный элемент. Если диапазон, содержащий элементы, эквивалентные t существующим в a_­eq, t вставляется в конец этого диапазона.
логарифмический
a.emplace_­hint(​p, args) iterator эквивалентно a.emplace( std​::​forward<​Args​>(​args)...). Возвращаемое значение - это итератор, указывающий на элемент с ключом, эквивалентным вновь вставленному элементу. Элемент вставляется как можно ближе к позиции непосредственно перед p. логарифмическая в целом, но амортизированная константа, если элемент вставлен прямо перед p
a_­uniq.​insert(​t) pair<​iterator, bool> Requires:  Если t - неконстантное выражение rvalue, value_­type должно быть MoveInsertable в X; в противном случае value_­type будет CopyInsertable в X.
Effects:  Вставляет t тогда и только тогда, когда в контейнере нет элемента с ключом, эквивалентным ключу t. bool Компонент возвращаемой пары true тогда и только тогда , когда имеет место вставки, и iterator компонент точек пары к элементу с ключом , эквивалентным ключом t.
логарифмический
a_­eq.​insert(​t) iterator Requires:  Если t - неконстантное выражение rvalue, value_­type должно быть MoveInsertable в X; в противном случае value_­type будет CopyInsertable в X.
Effects:  Вставляет t и возвращает итератор, указывающий на вновь вставленный элемент. Если диапазон, содержащий элементы, эквивалентные t существующим в a_­eq, t вставляется в конец этого диапазона.
логарифмический
a.​insert(​p, t) iterator Requires:  Если t - неконстантное выражение rvalue, value_­type должно быть MoveInsertable в X; в противном случае value_­type будет CopyInsertable в X.
Effects:  Вставляет, t если и только если нет элемента с ключом, эквивалентным ключу t в контейнерах с уникальными ключами; всегда вставляет t в контейнеры с эквивалентными ключами. Всегда возвращает итератор, указывающий на элемент с ключом, эквивалентным ключу t. t вставляется как можно ближе к позиции непосредственно перед p.
логарифмическая в целом, но амортизированная константа, если t вставлена ​​прямо перед ней p.
a.​insert(​i, j) void Requires:  value_­type должен быть EmplaceConstructible в X от *i.
Requires: i, j не являются итераторами в a. вставляет каждый элемент из диапазона [i, j) тогда и только тогда, когда нет элемента с ключом, эквивалентным ключу этого элемента, в контейнерах с уникальными ключами; всегда вставляет этот элемент в контейнеры с эквивалентными ключами.
Nlog(a.size()+N), где N имеет значение distance(i, j)
a.​insert(​il) void эквивалентно a.insert(il.begin(), il.end())
a_­uniq.​insert(​nh) insert_­return_­type Requires: nh пусто или a_­uniq.get_­allocator() == nh.get_­allocator().
Effects: Если nh пусто, не действует. В противном случае вставляет элемент, владельцем которого является, nh тогда и только тогда, когда в контейнере нет элемента с ключом, эквивалентным nh.key().
Postconditions: Если nh пусто, inserted есть false, position есть end()и node пусто. В противном случае, если вставка имела место, inserted is true, position указывает на вставленный элемент и node является пустым; если вставка не удалась, inserted это false, node имеет предыдущее значение nh, и position указывает на элемент с ключом , эквивалентным nh.key().
логарифмический
a_­eq.​insert(​nh) iterator Requires: nh пусто или a_­eq.get_­allocator() == nh.get_­allocator().
Effects: Если nh пусто, не действует и возвращается a_­eq.end(). В противном случае вставляет элемент, которым владеет, nh и возвращает итератор, указывающий на вновь вставленный элемент. Если диапазон, содержащий элементы с ключами, эквивалентными, nh.key() существует в a_­eq, элемент вставляется в конец этого диапазона.
Postconditions: nh пустой.
логарифмический
a.​insert(​p, nh) iterator Requires: nh пусто или a.get_­allocator() == nh.get_­allocator().
Effects: Если nh пусто, не действует и возвращается a.end(). В противном случае вставляет элемент, принадлежащий пользователю nh тогда и только тогда, когда нет элемента с ключом, эквивалентным nh.key() в контейнерах с уникальными ключами; всегда вставляет элемент, которым владеет, nh в контейнеры с эквивалентными ключами. Всегда возвращает итератор, указывающий на элемент с ключом, эквивалентным nh.key(). Элемент вставляется как можно ближе к позиции непосредственно перед p.
Postconditions: nh пусто, если вставка прошла успешно, не изменяется, если вставка не удалась.
логарифмическая в общем случае, но амортизированная константа, если элемент вставлен прямо перед ним p.
a.​extract(​k) node_­type удаляет первый элемент в контейнере с ключом, эквивалентным k. Возвращает элемент, node_­type владеющий элементом, если он найден, в противном случае - пустой node_­type. log(a.size())
a.​extract(​q) node_­type удаляет элемент, на который указывает q. Возвращает node_­type владение этим элементом. амортизированная постоянная
a.merge(a2) void Requires: a.get_­allocator() == a2.get_­allocator().
Пытается извлечь каждый элемент a2 и вставить его с a помощью объекта сравнения a. В контейнерах с уникальными ключами, если есть элемент a с ключом, эквивалентным ключу элемента из a2, то этот элемент не извлекается из a2.
Postconditions: Указатели и ссылки на переданные элементы a2 относятся к тем же элементам, но как членам a. Итераторы, относящиеся к переданным элементам, будут продолжать ссылаться на свои элементы, но теперь они ведут себя как итераторы в a, а не в a2.
Throws: Ничего, если объект сравнения не выбрасывает.
Nlog(a.size()+N), где N имеет значение a2.size().
a.erase(k) size_­type стирает все элементы в контейнере с ключом, эквивалентным k. возвращает количество стертых элементов. log(a.size())+a.count(k)
a.erase(q) iterator стирает элемент, на который указывает q. Возвращает итератор, указывающий на элемент, следующий сразу за q стираемым элементом. Если такого элемента нет, возвращается a.end(). амортизированная постоянная
a.erase(r) iterator стирает элемент, на который указывает r. Возвращает итератор, указывающий на элемент, следующий сразу за r стираемым элементом. Если такого элемента нет, возвращается a.end(). амортизированная постоянная
a.erase(
q1, q2)
iterator стирает все элементы в диапазоне [q1, q2). Возвращает итератор, указывающий на элемент, на который указывает до q2 стирания каких-либо элементов. Если такого элемента не существует, a.end() возвращается. log(a.size())+N, где N имеет значение distance(q1, q2).
a.clear() void a.erase(a.begin(),a.end())
Postconditions: a.empty() возвращается true.
линейно в a.size().
b.find(k) iterator; const_­iterator для постоянного b. возвращает итератор, указывающий на элемент с ключом, эквивалентным k, или b.end() если такой элемент не найден логарифмический
a_­tran.
find(ke)
iterator; const_­iterator для постоянного a_­tran. возвращает итератор, указывающий на элемент с r таким ключом , что !c(r, ke) && !c(ke, r), или a_­tran.end() если такой элемент не найден логарифмический
b.count(k) size_­type возвращает количество элементов с ключом, эквивалентным k log(b.size())+b.count(k)
a_­tran.
count(ke)
size_­type возвращает количество элементов с r таким ключом , что !c(r, ke) && !c(ke, r) log(a_tran.size())+a_tran.count(ke)
b.lower_­bound(k) iterator; const_­iterator для постоянного b. возвращает итератор, указывающий на первый элемент с ключом не меньше чем k, или b.end() если такой элемент не найден. логарифмический
a_­tran.
lower_­bound(kl)
iterator; const_­iterator для постоянного a_­tran. возвращает итератор, указывающий на первый элемент с r таким ключом , что !c(r, kl)или, a_­tran.end() если такой элемент не найден. логарифмический
b.upper_­bound(k) iterator; const_­iterator для постоянного b. возвращает итератор, указывающий на первый элемент с ключом больше чем k, или b.end() если такой элемент не найден. логарифмический
a_­tran.
upper_­bound(ku)
iterator; const_­iterator для постоянного a_­tran. возвращает итератор, указывающий на первый элемент с r таким ключом , что c(ku, r)или, a_­tran.end() если такой элемент не найден. логарифмический
b.equal_­range(k) pair<​iterator, iterator>; pair<​const_­iterator, const_­iterator> для постоянного b. эквивалентно make_­pair(b.lower_­bound(k), b.upper_­bound(k)). логарифмический
a_­tran.
equal_­range(ke)
pair<​iterator, iterator>; pair<​const_­iterator, const_­iterator> для постоянного a_­tran. эквивалентно . make_­pair(
a_­tran.lower_­bound(ke), a_­tran.upper_­bound(ke))
логарифмический

26.2.7 Unordered associative containers [unord.req]

Таблица 91 - Требования к неупорядоченному ассоциативному контейнеру (в дополнение к контейнеру)
ВыражениеТип возвратаУтверждение / примечаниеСложность
до / после состояния
X​::​key_­type Key время компиляции
X​::​mapped_­type ( unordered_­map и unordered_­multimap только) T время компиляции
X​::​value_­type ( unordered_­set и unordered_­multiset только) Key Requires:  value_­type это Erasable из X время компиляции
X​::​value_­type ( unordered_­map и unordered_­multimap только) pair<const Key, T> Requires:  value_­type это Erasable из X время компиляции
X​::​hasher Hash Hash должен быть унарным типом функционального объекта, так что выражение hf(k) имеет тип size_­t. время компиляции
X​::​key_­equal Pred Requires:  Pred есть CopyConstructible.
Pred должен быть двоичным предикатом, который принимает два аргумента типа Key. Pred является отношением эквивалентности.
время компиляции
X​::​local_­iterator Тип итератора, категория, тип значения, тип различия, указатель и ссылочный тип которого совпадают с типом итератора X​::​iterator. local_­iterator Объект может быть использован для итерации через одно ведро, но не может быть использован для итерации по ковшам. время компиляции
X​::​const_­local_­iterator Тип итератора, категория, тип значения, тип различия, указатель и ссылочный тип которого совпадают с типом итератора X​::​const_­iterator. const_­local_­iterator Объект может быть использован для итерации через одно ведро, но не может быть использован для итерации по ковшам. время компиляции
X​::​node_­type специализация node_­handle шаблона класса, так что общедоступные вложенные типы являются теми же типами, что и соответствующие типы в X. видеть [container.node] время компиляции
X(n, hf, eq)
X a(n, hf, eq);
X Effects:  Создает пустой контейнер, по крайней мере n , с ведрами, используя hf в качестве хеш-функции и eq в качестве ключевого предиката равенства. O(n)
X(n, hf)
X a(n, hf);
X Requires:  key_­equal есть DefaultConstructible.
Effects:  Создает пустой контейнер, по крайней мере n , с ведрами, используя hf в качестве хеш-функции и key_­equal() в качестве ключевого предиката равенства.
O(n)
X(n)
X a(n);
X Requires:  hasher и key_­equal есть DefaultConstructible.
Effects:  Создает пустой контейнер, по крайней мере n , с ведрами, используя hasher() в качестве хеш-функции и key_­equal() в качестве ключевого предиката равенства.
O(n)
X()
X a;
X Requires:  hasher и key_­equal есть DefaultConstructible.
Effects:  Создает пустой контейнер с неопределенным количеством сегментов, используя hasher() в качестве хеш-функции и key_­equal() в качестве ключевого предиката равенства.
постоянный
X(i, j, n, hf, eq)
X a(i, j, n, hf, eq);
X Requires:  value_­type находится EmplaceConstructible в X от *i.
Effects:  Создает пустой контейнер как минимум с n корзинами, используя hf в качестве хеш-функции и eq в качестве ключевого предиката равенства, и вставляет [i, j) в него элементы из .
Средний случай O(N) ( N это distance(i, j)), в худшем случае O(N2)
X(i, j, n, hf)
X a(i, j, n, hf);
X Requires:  key_­equal есть DefaultConstructible. value_­type находится EmplaceConstructible в X от *i.
Effects:  Создает пустой контейнер как минимум с n корзинами, используя hf в качестве хеш-функции и key_­equal() в качестве ключевого предиката равенства, и вставляет [i, j) в него элементы из .
Средний случай O(N) ( N это distance(i, j)), в худшем случае O(N2)
X(i, j, n)
X a(i, j, n);
X Requires:  hasher и key_­equal есть DefaultConstructible. value_­type находится EmplaceConstructible в X от *i.
Effects:  Создает пустой контейнер как минимум с n корзинами, используя hasher() в качестве хеш-функции и key_­equal() в качестве ключевого предиката равенства, и вставляет [i, j) в него элементы из .
Средний случай O(N) ( N это distance(i, j)), в худшем случае O(N2)
X(i, j)
X a(i, j);
X Requires:  hasher и key_­equal есть DefaultConstructible. value_­type находится EmplaceConstructible в X от *i.
Effects:  Создает пустой контейнер с неопределенным количеством сегментов, используя hasher() в качестве хэш-функции и key_­equal() в качестве ключевого предиката равенства, и вставляет [i, j) в него элементы из .
Средний случай O(N) ( N это distance(i, j)), в худшем случае O(N2)
X(il) X То же, что и X(il.begin(), il.end()). То же, что и X(il.begin(), il.end()).
X(il, n) X То же, что и X(il.begin(), il.end(), n). То же, что и X(il.begin(), il.end(), n).
X(il, n, hf) X То же, что и X(il.begin(), il.end(), n, hf). То же, что и X(il.begin(), il.end(), n, hf).
X(il, n, hf, eq) X То же, что и X(il.begin(), il.end(), n, hf, eq). То же, что и X(il.begin(), il.end(), n, hf, eq).
X(b)
X a(b);
X Конструктор копирования. В дополнение к требованиям Table 83, копирует хэш-функцию, предикат и максимальный коэффициент загрузки. Средний случай линейный по b.size(), худший квадратичный.
a = b X& Оператор присваивания копий. В дополнение к требованиям Table 83, копирует хэш-функцию, предикат и максимальный коэффициент загрузки. Средний случай линейный по b.size(), худший квадратичный.
a = il X& Requires:  value_­type находится CopyInsertable в X и CopyAssignable.
Effects:  Назначает диапазон [il.begin(), il.end()) в a. Все существующие элементы a либо присваиваются, либо уничтожаются.
То же, что и a = X(il).
b.hash_­function() hasher Возвращает bхеш-функцию. постоянный
b.key_­eq() key_­equal Возвращает bпредикат равенства ключей. постоянный
a_­uniq. emplace(args) pair<iterator, bool> Requires:  value_­type должен быть EmplaceConstructible в X от args.
Effects:  Вставляет value_­type объект, t созданный с помощью std​::​forward<​Args​>(​args)... if и только если в контейнере нет элемента с ключом, эквивалентным ключу t. bool Компонент возвращаемой пары true тогда и только тогда , когда имеет место вставка, а итератор компонент из точек пары к элементу с ключом , эквивалентным ключом t.
Средний случай O(1), худший случай O(a_uniq.size()).
a_­eq.emplace(args) iterator Requires:  value_­type должен быть EmplaceConstructible в X от args.
Effects:  Вставляет value_­type объект, созданный t с помощью, std​::​forward<​Args>(​args)... и возвращает итератор, указывающий на вновь вставленный элемент.
Средний случай O(1), худший случай O(a_eq.size()).
a.emplace_­hint(p, args) iterator Requires:  value_­type должен быть EmplaceConstructible в X от args.
Effects:  Эквивалентно a.emplace( std​::​forward<​Args>(​args)...). Возвращаемое значение - это итератор, указывающий на элемент с ключом, эквивалентным вновь вставленному элементу. Это const_­iterator p подсказка, указывающая, где должен начинаться поиск. Реализациям разрешено игнорировать подсказку.
Средний случай O(1), худший случай O(a.size()).
a_­uniq.insert(t) pair<iterator, bool> Requires:  Если t - неконстантное выражение rvalue, value_­type должно быть MoveInsertable в X; в противном случае value_­type будет CopyInsertable в X.
Effects:  Вставляет t тогда и только тогда, когда в контейнере нет элемента с ключом, эквивалентным ключу t. bool Компонент возвращаемой пары указывает , имеет ли место вставки, и iterator компонент указывает на элемент с ключом , эквивалентным ключом t.
Средний случай O(1), худший случай O(a_uniq.size()).
a_­eq.insert(t) iterator Requires:  Если t - неконстантное выражение rvalue, value_­type должно быть MoveInsertable в X; в противном случае value_­type будет CopyInsertable в X.
Effects:  Вставляет tи возвращает итератор, указывающий на вновь вставленный элемент.
Средний случай O(1), худший случай O(a_eq.size()).
a.insert(p, t) iterator Requires:  Если t - неконстантное выражение rvalue, value_­type должно быть MoveInsertable в X; в противном случае value_­type будет CopyInsertable в X.
Effects:  Эквивалентно a.insert (t). Возвращаемое значение - итератор, указывающий на элемент с ключом, эквивалентным ключу t. Итератор p - это подсказка, указывающая, где должен начинаться поиск. Реализациям разрешено игнорировать подсказку.
Средний случай O(1), худший случай O(a.size()).
a.insert(i, j) void Requires:  value_­type должен быть EmplaceConstructible в X от *i.
Requires: i и j не являются итераторами в a. Эквивалентно a.insert(t) для каждого элемента в [i,j).
Средний случай O(N), где N есть distance(i, j). Худший случай O(N(a.size()+1)).
a.insert(il) void То же, что и a.insert(il.begin(), il.end()). То же, что и a.insert( il.begin(), il.end()).
a_­uniq.
insert(nh)
insert_­return_­type Requires: nh пусто или a_­uniq.get_­allocator() == nh.get_­allocator().
Effects: Если nh пусто, не действует. В противном случае вставляет элемент, владельцем которого является, nh тогда и только тогда, когда в контейнере нет элемента с ключом, эквивалентным nh.key().
Postconditions: Если nh пусто, inserted есть false, position есть end()и node пусто. В противном случае, если вставка имела место, inserted is true, position указывает на вставленный элемент и node является пустым; если вставка не удалась, inserted это false, node имеет предыдущее значение nh, и position указывает на элемент с ключом , эквивалентным nh.key().
Средний случай O(1), худший случай O(a_uniq.size()).
a_­eq.
insert(nh)
iterator Requires: nh пусто или a_­eq.get_­allocator() == nh.get_­allocator().
Effects: Если nh пусто, не действует и возвращается a_­eq.end(). В противном случае вставляет элемент, которым владеет, nh и возвращает итератор, указывающий на вновь вставленный элемент.
Postconditions: nh пустой.
Средний случай O(1), худший случай O(a_eq.size()).
a.insert(q, nh) iterator Requires: nh пусто или a.get_­allocator() == nh.get_­allocator().
Effects: Если nh пусто, не действует и возвращается a.end(). В противном случае вставляет элемент, принадлежащий пользователю nh тогда и только тогда, когда нет элемента с ключом, эквивалентным nh.key() в контейнерах с уникальными ключами; всегда вставляет элемент, которым владеет, nh в контейнеры с эквивалентными ключами. Всегда возвращает итератор, указывающий на элемент с ключом, эквивалентным nh.key(). Итератор q - это подсказка, указывающая, где должен начинаться поиск. Реализациям разрешено игнорировать подсказку.
Postconditions: nh пусто, если вставка прошла успешно, не изменяется, если вставка не удалась.
Средний случай O(1), худший случай O(a.size()).
a.extract(k) node_­type Удаляет элемент в контейнере с ключом, эквивалентным k. Возвращает элемент, node_­type владеющий элементом, если он найден, в противном случае - пустой node_­type. Средний случай O(1), худший случай O(a.size()).
a.extract(q) node_­type Удаляет элемент, на который указывает q. Возвращает node_­type владение этим элементом. Средний случай O(1), худший случай O(a.size()).
a.merge(a2) void Requires: a.get_­allocator() == a2.get_­allocator().
Пытается извлечь каждый элемент a2 и вставить его, a используя хеш-функцию и предикат равенства ключей a. В контейнерах с уникальными ключами, если есть элемент a с ключом, эквивалентным ключу элемента из a2, то этот элемент не извлекается из a2. Postconditions: Указатели и ссылки на переданные элементы a2 относятся к тем же элементам, но как членам a. Итераторы, относящиеся к переданным элементам, и все итераторы, на которые ссылаются, a будут признаны недействительными, но итераторы для оставшихся элементов a2 останутся действительными.
Throws: Ничего, если не выбрасывает хэш-функция или предикат равенства ключей.
Средний случай O(N), где N есть a2.size(). Худший случай O(N*a.size()+N).
a.erase(k) size_­type Удаляет все элементы с ключом, эквивалентным k. Возвращает количество стертых элементов. Средний случай O(a.count(k)). Худший случай O(a.size()).
a.erase(q) iterator Удаляет элемент, на который указывает q. Возвращает итератор, следующий сразу q за стиранием. Средний случай O(1), худший случай O(a.size()).
a.erase(r) iterator Удаляет элемент, на который указывает r. Возвращает итератор, следующий сразу r за стиранием. Средний случай O(1), худший случай O(a.size()).
a.erase(q1, q2) iterator Удаляет все элементы в диапазоне [q1, q2). Возвращает итератор сразу после стертых элементов до стирания. Средний случай, линейный по distance(q1, q2), худший случай O(a.size()).
a.clear() void Удаляет все элементы в контейнере. Postconditions: a.empty() возвращается true Линейный вход a.size().
b.find(k) iterator;
const_­iterator для конст b.
Возвращает итератор, указывающий на элемент с ключом, эквивалентным k, или b.end() если такой элемент не существует. Средний случай O(1), худший случай O(b.size()).
b.count(k) size_­type Возвращает количество элементов с ключом, эквивалентным k. Средний случай O(b.count(k)), худший случай O(b.size()).
b.equal_­range(k) pair<iterator, iterator>;
pair<const_­iterator, const_­iterator> для конст b.
Возвращает диапазон, содержащий все элементы с ключами, эквивалентными k. Возвращает, make_­pair(b.end(), b.end()) если таких элементов не существует. Средний случай O(b.count(k)). Худший случай O(b.size()).
b.bucket_­count() size_­type Возвращает количество содержащихся сегментов b . Постоянный
b.max_­bucket_­count() size_­type Возвращает верхнюю границу количества сегментов, которые b могут когда-либо содержаться. Постоянный
b.bucket(k) size_­type Requires: b.bucket_­count() > 0.
Возвращает индекс корзины, в которой k были бы найдены элементы с ключами, эквивалентными , если бы такой элемент существовал. Postconditions: возвращаемое значение должно быть в диапазоне [0, b.bucket_­count()).
Постоянный
b.bucket_­size(n) size_­type Requires: n должен быть в пределах [0, b.bucket_­count()). Возвращает количество элементов в n th корзине. O(b.bucket_size(n))
b.begin(n) local_­iterator;
const_­local_­iterator для конст b.
Requires: n должен быть в пределах [0, b.bucket_­count()). b.begin(n) возвращает итератор, ссылающийся на первый элемент в корзине. Если ведро пустое, то b.begin(n) == b.end(n). Постоянный
b.end(n) local_­iterator;
const_­local_­iterator для конст b.
Requires: n должен быть в пределах [0, b.bucket_­count()). b.end(n) возвращает итератор, который является последним значением для сегмента. Постоянный
b.cbegin(n) const_­local_­iterator Requires: n должен быть в пределах [0, b.bucket_­count()). Примечание. [b.cbegin(n), b.cend(n)) Это допустимый диапазон, содержащий все элементы в n th сегменте. Постоянный
b.cend(n) const_­local_­iterator Requires: n должен быть в пределах [0, b.bucket_­count()). Постоянный
b.load_­factor() float Возвращает среднее количество элементов в ведре. Постоянный
b.max_­load_­factor() float Возвращает положительное число, при котором контейнер пытается сохранить коэффициент загрузки меньше или равным. Контейнер автоматически увеличивает количество ковшей по мере необходимости, чтобы коэффициент загрузки не превышал этого числа. Постоянный
a.max_­load_­factor(z) void Requires: z должен быть положительным. Может изменить максимальный коэффициент загрузки контейнера, используя z как подсказку. Постоянный
a.rehash(n) void Postconditions: a.bucket_­count() >= a.size() / a.max_­load_­factor() и a.bucket_­count() >= n. Средний случай линейный по a.size(), худший квадратичный.
a.reserve(n) void То же, что и a.rehash(ceil(n / a.max_­load_­factor())). Средний случай линейный по a.size(), худший квадратичный.

27.1 General [iterators.general]

Таблица 92 - Сводка библиотеки итераторов
Подпункт Заголовок (ы)
[iterator.requirements] Требования
[iterator.primitives] Итераторные примитивы <iterator>
[predef.iterators] Предопределенные итераторы
[stream.iterators] Итераторы потока

27.2.1 In general [iterator.requirements.general]

Таблица 93 - отношения между категориями итераторов
Произвольный доступ Двунаправленный Вперед Вход
Выход

27.2.2 Iterator [iterator.iterators]

Таблица 94 - Требования к итератору
ВыражениеТип возвратаОперативныйУтверждение / примечание
семантикадо / после состояния
*r неопределенные Requires: r разыменуемо.
++r X&

27.2.3 Input iterators [input.iterators]

Таблица 95 - Требования к итератору ввода (в дополнение к Iterator)
ВыражениеТип возвратаОперативныйУтверждение / примечание
семантикадо / после состояния
a != b контекстно конвертируемый в bool !(a == b) Requires: (a, b) находится в домене ==.
*a reference, конвертируемый в T Requires: a разыменуемо.
Выражение
(void)*a, *a эквивалентно *a.
Если a == b и (a, b) находится в домене, == то *a эквивалентно *b.
a->m (*a).m Requires: a разыменуемо.
++r X& Requires: r разыменуемо.
Postconditions: r разыменован или окончен r ;
любые копии предыдущего значения r больше не должны быть разыменованными или находиться в домене ==.
(void)r++ эквивалентно (void)++r
*r++ конвертируемый в T { T tmp = *r;
++r;
return tmp; }

27.2.4 Output iterators [output.iterators]

Таблица 96 - Требования к итератору вывода (в дополнение к Iterator)
ВыражениеТип возвратаОперативныйУтверждение / примечание
семантикадо / после состояния
*r = o результат не используется Remarks:  После этой операции r разыменование не требуется.
Postconditions: r является увеличиваемым.
++r X& &r == &++r.
Remarks:  После этой операции r разыменование не требуется.
Postconditions: r является увеличиваемым.
r++ конвертируемый в const X& { X tmp = r;
++r;
return tmp; }
Remarks:  После этой операции r разыменование не требуется.
Postconditions: r является увеличиваемым.
*r++ = o результат не используется Remarks:  После этой операции r разыменование не требуется.
Postconditions: r является увеличиваемым.

27.2.5 Forward iterators [forward.iterators]

Таблица 97 - Требования прямого итератора (в дополнение к итератору ввода)
ВыражениеТип возвратаОперативныйУтверждение / примечание
семантикадо / после состояния
r++ конвертируемый в const X& { X tmp = r;
++r;
return tmp; }
*r++ reference

27.2.6 Bidirectional iterators [bidirectional.iterators]

Таблица 98 - Требования к двунаправленному итератору (в дополнение к прямому итератору)
ВыражениеТип возвратаОперативныйУтверждение / примечание
семантикадо / после состояния
--r X& Requires: существует s такое что r == ++s.
Postconditions: r разыменуемо.
--(++r) == r.
--r == --s подразумевает r == s.
&r == &--r.
r-- конвертируемый в const X& { X tmp = r;
--r;
return tmp; }
*r-- reference

27.2.7 Random access iterators [random.access.iterators]

Таблица 99 - Требования к итератору произвольного доступа (в дополнение к двунаправленному итератору)
ВыражениеТип возвратаОперативныйУтверждение / примечание
семантикадо / после состояния
r += n X& { difference_­type m = n;
if (m >= 0)
while (m--)
++r;
else
while (m++)
--r;
return r; }
a + n
n + a
X { X tmp = a;
return tmp += n; }
a + n == n + a.
r -= n X& return r += -n; Requires: абсолютное значение n находится в диапазоне представимых значений difference_­type.
a - n X { X tmp = a;
return tmp -= n; }
b - a difference_­type return n Requires: существует такое значение n типа difference_­type , что a + n == b.
b == a + (b - a).
a[n] конвертируемый в reference *(a + n)
a < b контекстно конвертируемый в bool b - a > 0 < отношение полного порядка
a > b контекстно конвертируемый в bool b < a > отношение полного порядка, противоположное <.
a >= b контекстно конвертируемый в bool !(a < b)
a <= b контекстно конвертируемый в bool. !(a > b)

28.1 General [algorithms.general]

Таблица 100 - Сводка библиотеки алгоритмов
Подпункт Заголовок (ы)
[alg.nonmodifying] Немодифицирующие операции последовательности
[alg.modifying.operations] Операции мутирующей последовательности <algorithm>
[alg.sorting] Сортировка и сопутствующие операции
[alg.c.library] Алгоритмы библиотеки C <cstdlib>

29.1 General [numerics.general]

Таблица 101 - Сводка библиотеки числовых значений
Подпункт Заголовок (ы)
[numerics.defns] Определения
[numeric.requirements] Требования
[cfenv] Среда с плавающей точкой <cfenv>
[complex.numbers] Сложные числа <complex>
[rand] Генерация случайных чисел <random>
[numarray] Числовые массивы <valarray>
[numeric.ops] Обобщенные числовые операции <numeric>
[c.math] Математические функции для <cmath>
типы с плавающей запятой <cstdlib>

29.6.1.2 Seed sequence requirements [rand.req.seedseq]

Таблица 102 - Требования к последовательности посева
ВыражениеТип возвратаДо / после состоянияСложность
S​::​result_­type T T представляет собой , unsigned integer type по меньшей мере , 32 бита. время компиляции
S() Создает начальную последовательность с тем же начальным состоянием, что и все другие исходные последовательности типа, сконструированные по умолчанию S. постоянный
S(ib,ie) Создает начальную последовательность, имеющую внутреннее состояние, которое зависит от некоторых или всех битов предоставленной последовательности [ib,ie). O(ieib)
S(il) То же, что и S(il.begin(), il.end()). такой же как S(il.begin(), il.end())
q.generate(rb,re) void Ничего не делает, если rb == re. В противном случае заполняет предоставленную последовательность [rb,re) 32-битными величинами, которые зависят от последовательности, предоставленной конструктору, и, возможно, также зависят от истории generateпредыдущих вызовов. O(rerb)
r.size() size_­t Количество 32-битных единиц, которые будут скопированы при вызове r.param. постоянный
r.param(ob) void Копирует в указанное место назначения последовательность 32-битных единиц, которые могут быть предоставлены конструктору второго объекта типа S, и которые будут воспроизводить в этом втором объекте состояние, неотличимое от состояния первого объекта. O(r.size())

29.6.1.3 Uniform random bit generator requirements [rand.req.urng]

Таблица 103 - Требования к генератору единых случайных битов
ВыражениеТип возвратаДо / после состоянияСложность
G​::​result_­type T T это unsigned integer type. время компиляции
g() T Возвращает значение в замкнутом интервале [G​::​min(), G​::​max()]. амортизированная постоянная
G​::​min() T Обозначает наименьшее значение, которое потенциально может вернуть operator(). время компиляции
G​::​max() T Обозначает наибольшее значение, которое потенциально может вернуть operator(). время компиляции

29.6.1.4 Random number engine requirements [rand.req.eng]

Таблица 104 - Требования к механизму случайных чисел
ВыражениеТип возвратаДо / после состоянияСложность
E() Создает механизм с тем же начальным состоянием, что и все другие механизмы типа, построенные по умолчанию E. O(size of state)
E(x) Создает движок, который сравнивает равный x. O(size of state)
E(s) Создает движок с начальным состоянием, определяемым s. O(size of state)
E(q)268 Создает движок с начальным состоянием, которое зависит от последовательности, созданной одним вызовом q.generate. q.generate такая же, как сложность вызываемой последовательности, длина которой равна размеру состояния
e.seed() void Postconditions: e == E(). такой же как E()
e.seed(s) void Postconditions: e == E(s). такой же как E(s)
e.seed(q) void Postconditions: e == E(q). такой же как E(q)
e() T Авансы eдержавотворческая ei к ei+1 =TA(ei) и возвращается GA(ei). за таблицу 103
e.discard(z) 269 void Авансы eдержавотворческих ei к ei+z любому способу эквивалентного z последовательным вызовов e(). не хуже сложности z последовательных звонков e()
x == y bool Этот оператор является отношением эквивалентности. С Sx и Sy как бесконечные последовательности значений, которые будут сгенерированы повторными вызовами в будущем, x() и y(), соответственно, возвращает true if Sx=Sy; иначе возвращается false. O(size of state)
x != y bool !(x == y). O(size of state)
os << x ссылка на тип os Если os.fmtflags задано значение ios_­base​::​dec|ios_­base​::​left и символ заполнения установлен на пробел, os выполняется запись в текстовое представление xтекущего состояния. В выводе соседние числа разделяются одним или несколькими пробелами. И символ - заполнитель не изменяются. Postconditions: os.fmtflags O(size of state)
is >> v ссылка на тип is Если is.fmtflags установлено в ios_­base​::​dec, устанавливает vсостояние, определяемое чтением его текстового представления из is. Если обнаружен неверный ввод, гарантирует, что vсостояние не изменится в результате операции и вызовов is.setstate(ios​::​failbit) (которые могут вызывать throw ios​::​failure ( [iostate.flags])). Если текстовое представление, записанное через, os << x было впоследствии прочитано через is >> v, то x == v при условии, что не было промежуточных вызовов of x или of v. Requires: is предоставляет текстовое представление, которое ранее было написано с использованием выходного потока, встроенная локаль которого была такой же, как и у is, и аргументы специализации шаблона charT и для которого traits были, соответственно, такими же, как у is. Неизменны. Postconditions: is.fmtflags O(size of state)

29.6.1.6 Random number distribution requirements [rand.req.dist]

Таблица 105 - Требования к распределению случайных чисел
ВыражениеТип возвратаДо / после состоянияСложность
D​::​result_­type T T это arithmetic type. время компиляции
D​::​param_­type P время компиляции
D() Создает распределение, поведение которого неотличимо от поведения любого другого вновь созданного по умолчанию распределения типа D. постоянный
D(p) Создает распределение, поведение которого неотличимо от поведения вновь созданного распределения, непосредственно из значений, используемых для построения p. такая же, как pи конструкция
d.reset() void Последующее использование d не зависит от значений, созданных каким-либо механизмом перед вызовом reset. постоянный
x.param() P Возвращает такое значение p , что D(p).param() == p. не хуже, чем сложность D(p)
d.param(p) void Postconditions: d.param() == p. не хуже, чем сложность D(p)
d(g) T С p=d.param(), последовательность чисел, возвращаемая последовательными вызовами одного и того же объекта g , случайным образом распределяется в соответствии с ассоциированной функцией p(z|{p}) или P(zi|{p}). амортизируемое постоянное количество вызовов g
d(g,p) T Последовательность чисел, возвращаемая последовательными вызовами одних g и тех же объектов, p случайным образом распределяется в соответствии с ассоциированной функцией p(z|{p}) или P(zi|{p})функцией. амортизируемое постоянное количество вызовов g
x.min() T Возврат glb. постоянный
x.max() T Возврат lub. постоянный
x == y bool Этот оператор является отношением эквивалентности. Возвращает true if x.param() == y.param() и S1=S2, где S1 и S2 - бесконечные последовательности значений, которые будут генерироваться, соответственно, повторными вызовами в будущем x(g1) и y(g2) всякий раз g1 == g2. В противном случае возвращается false. постоянный
x != y bool !(x == y). так же, как x == y.
os << x ссылка на тип os Записывает в os текстовое представление параметры и дополнительные внутренние данные x. И символ - заполнитель не изменяются. Postconditions: os.fmtflags
is >> d ссылка на тип is Восстанавливается из is параметров и дополнительных внутренних данных lvalue d. Если обнаружен неправильный ввод, гарантирует, что d операция и вызовы не изменят его is.setstate(ios​::​failbit) (что может вызвать throw ios​::​failure ( [iostate.flags])). Requires: is обеспечивает текстовое представление , которое было ранее написанным используя os которого пронизана локаль и чьи аргументы шаблона специализации типа в charT и traits были такими же , как те is. Неизменны. Postconditions: is.fmtflags

30.1 General [input.output.general]

Таблица 106 - Сводная информация о библиотеке ввода / вывода
Подпункт Заголовок (ы)
[iostreams.requirements] Требования
[iostream.forward] Форвардные декларации <iosfwd>
[iostream.objects] Стандартные объекты iostream <iostream>
[iostreams.base] Базовые классы Iostreams <ios>
[stream.buffers] Буферы потока <streambuf>
[iostream.format] Форматирование и манипуляторы <istream>
<ostream>
<iomanip>
[string.streams] Строковые потоки <sstream>
[file.streams] Файловые потоки <fstream>
[filesystems] Файловые системы <filesystem>
[c.files] Файлы библиотеки C <cstdio>
<cinttypes>

30.5.3.1.2 Type ios_­base​::​fmtflags [ios::fmtflags]

Таблица 107 - fmtflags эффекты
ЭлементЭффект (ы), если установлен
boolalpha вставить и извлечь bool тип в алфавитном формате
dec преобразует целочисленный ввод или генерирует целочисленный вывод в десятичной системе счисления
fixed генерировать вывод с плавающей запятой в нотации с фиксированной запятой
hex преобразует целочисленный ввод или генерирует целочисленный вывод в шестнадцатеричной системе счисления
internal добавляет символы заливки в обозначенную внутреннюю точку в определенном сгенерированном выводе или идентично, right если такая точка не обозначена
left добавляет символы заливки справа (конечные позиции) определенного сгенерированного вывода
oct преобразует целочисленный ввод или генерирует целочисленный вывод в восьмеричной системе счисления
right добавляет символы заполнения слева (начальные позиции) определенного сгенерированного вывода
scientific генерирует вывод с плавающей запятой в экспоненциальной нотации
showbase генерирует префикс, указывающий числовую основу сгенерированного целочисленного вывода
showpoint безоговорочно генерирует символ десятичной точки в сгенерированном выводе с плавающей запятой
showpos генерирует + знак в неотрицательном сгенерированном числовом выводе
skipws пропускает начальные пробелы перед определенными операциями ввода
unitbuf сбрасывает вывод после каждой операции вывода
uppercase заменяет определенные строчные буквы их эквивалентами в верхнем регистре в сгенерированном выводе

30.5.3.1.2 Type ios_­base​::​fmtflags [ios::fmtflags]

Таблица 108 - fmtflags константы
ПостоянныйДопустимые значения
adjustfield left | right | internal
basefield dec | oct | hex
floatfield scientific | fixed

30.5.3.1.3 Type ios_­base​::​iostate [ios::iostate]

Таблица 109 - iostate эффекты
ЭлементЭффект (ы), если установлен
badbit указывает на потерю целостности во входной или выходной последовательности (например, на неисправимую ошибку чтения из файла);
eofbit указывает, что операция ввода достигла конца входной последовательности;
failbit указывает, что операция ввода не смогла прочитать ожидаемые символы или что операция вывода не смогла сгенерировать желаемые символы.

30.5.3.1.4 Type ios_­base​::​openmode [ios::openmode]

Таблица 110 - openmode эффекты
ЭлементЭффект (ы), если установлен
app стремиться закончить перед каждой записью
ate открывать и стремиться к завершению сразу после открытия
binary выполнять ввод и вывод в двоичном режиме (в отличие от текстового режима)
in открыт для ввода
out открыт для вывода
trunc обрезать существующий поток при открытии

30.5.3.1.5 Type ios_­base​::​seekdir [ios::seekdir]

Таблица 111 - seekdir эффекты
ЭлементИмея в виду
beg запросить поиск (для последующего ввода или вывода) относительно начала потока
cur запросить поиск относительно текущей позиции в последовательности
end запросить поиск относительно текущего конца последовательности

30.5.4.2 fpos requirements [fpos.operations]

Таблица 112 - Требования к типу позиции
ВыражениеТип возвратаОперативныйУтверждение / примечание
семантикадо / после состояния
P(i) p == P(i)
примечание: предполагается деструктор.
P p(i);
P p = i;
Postconditions: p == P(i).
P(o) fpos конвертирует из offset
O(p) streamoff конвертируется в offset P(O(p)) == p
p == q конвертируемый в bool == является отношением эквивалентности
p != q конвертируемый в bool !(p == q)
q = p + o
p += o
fpos + компенсировать q - o == p
q = p - o
p -= o
fpos - компенсировать q + o == p
o = p - q streamoff расстояние q + o == p
streamsize(o)
O(sz)
streamsize
streamoff
обращает
новообращенных
streamsize(O(sz)) == sz
streamsize(O(sz)) == sz

30.5.5.2 basic_­ios constructors [basic.ios.cons]

Таблица 113 - basic_­ios​::​init() эффекты
ЭлементЦенить
rdbuf() sb
tie() 0
rdstate() goodbit если sb не является нулевым указателем, в противном случае badbit.
exceptions() goodbit
flags() skipws | dec
width() 0
precision() 6
fill() widen(' ')
getloc() копия значения, возвращаемого locale()
iarray нулевой указатель
parray нулевой указатель

30.5.5.3 Member functions [basic.ios.members]

Таблица 114 - basic_­ios​::​copyfmt() эффекты
ЭлементЦенить
rdbuf() unchanged
tie() rhs.tie()
rdstate() unchanged
exceptions() rhs.exceptions()
flags() rhs.flags()
width() rhs.width()
precision() rhs.precision()
fill() rhs.fill()
getloc() rhs.getloc()

30.8.2.4 Overridden virtual functions [stringbuf.virtuals]

Стол 115 - seekoff позиционирование
УсловияРезультат
(which & ios_­base​::​in) == ios_­base​::​in позиционирует входную последовательность
(which & ios_­base​::​out) == ios_­base​::​out позиционирует выходную последовательность
(which & (ios_­base​::​in |
ios_­base​::​out)) ==
(ios_­base​::​in) |
ios_­base​::​out))
и way == либо,
ios_­base​::​beg либо
ios_­base​::​end
позиционирует как входную, так и выходную последовательности
Иначе операция позиционирования не выполняется.

30.8.2.4 Overridden virtual functions [stringbuf.virtuals]

Таблица 116 - newoff значения
Состояниеnewoff Ценить
way == ios_­base​::​beg 0
way == ios_­base​::​cur следующий указатель минус указатель начала ( xnext - xbeg).
way == ios_­base​::​end указатель верхней отметки минус указатель начала ( high_­mark - xbeg).

30.9.2.3 Member functions [filebuf.members]

Таблица 117 - Режимы открытия файла
ios_­base комбинация флагов stdio эквивалент
binary in out trunc app
+ "w"
+ + "a"
+ "a"
+ + "w"
+ "r"
+ + "r+"
+ + + "w+"
+ + + "a+"
+ + "a+"
+ + "wb"
+ + + "ab"
+ + "ab"
+ + + "wb"
+ + "rb"
+ + + "r+b"
+ + + + "w+b"
+ + + + "a+b"
+ + + "a+b"

30.9.2.4 Overridden virtual functions [filebuf.virtuals]

Таблица 118 - seekoff эффекты
way Ценитьstdio Эквивалент
basic_­ios​::​beg SEEK_­SET
basic_­ios​::​cur SEEK_­CUR
basic_­ios​::​end SEEK_­END

30.10.28.1 filesystem_­error members [filesystem_error.members]

Таблица 119 - filesystem_­error(const string&, error_­code) эффекты
ВыражениеЦенить
runtime_­error​::​what() what_­arg.c_­str()
code() ec
path1().empty() true
path2().empty() true

30.10.28.1 filesystem_­error members [filesystem_error.members]

Таблица 120 - filesystem_­error(const string&, const path&, error_­code) эффекты
ВыражениеЦенить
runtime_­error​::​what() what_­arg.c_­str()
code() ec
path1() Ссылка на сохраненную копию p1
path2().empty() true

30.10.28.1 filesystem_­error members [filesystem_error.members]

Таблица 121 - filesystem_­error(const string&, const path&, const path&, error_­code) эффекты
ВыражениеЦенить
runtime_­error​::​what() what_­arg.c_­str()
code() ec
path1() Ссылка на сохраненную копию p1
path2() Ссылка на сохраненную копию p2

30.10.29.1 Enum path​::​format [fs.enum.path.format]

Таблица 122 - Enum path​::​format
ИмяИмея в виду
native_­format Собственный формат имени пути.
generic_­format Общий формат имени пути.
auto_­format Интерпретация формата символьной последовательности определяется реализацией. Реализация может проверять содержимое последовательности символов, чтобы определить формат. [ Note: Для систем на основе POSIX собственный и общий форматы эквивалентны, и последовательность символов всегда должна интерпретироваться одинаково. ] end note

30.10.29.2 Enum class file_­type [fs.enum.file_type]

Таблица 123 - класс Enum file_­type
ПостоянныйИмея в виду
none Тип файла не определен или произошла ошибка при попытке определить тип.
not_­found Псевдотип, указывающий, что файл не найден. [Если Note: файл не найден, это не считается ошибкой при определении типа файла. ] end note
regular Обычный файл
directory Каталог файлов
symlink Файл символьной ссылки
block Заблокировать специальный файл
character Специальный файл символов
fifo FIFO или файл трубы
socket Файл сокета
implementation-defined Реализации, которые поддерживают файловые системы, имеющие типы файлов в дополнение к вышеуказанным file_­type типам, должны предоставлять константы, определяемые реализацией, file_­type для отдельной идентификации каждого из этих дополнительных типов файлов.
unknown Файл существует, но тип не может быть определен

30.10.29.3 Enum class copy_­options [fs.enum.copy.opts]

Таблица 124 - класс Enum copy_­options
Группа опций, управляющая copy_­file эффектами функций для существующих целевых файлов
ПостоянныйИмея в виду
none (По умолчанию) Ошибка; Файл уже существует.
skip_­existing Не перезаписывать существующий файл, не сообщать об ошибке.
overwrite_­existing Перезаписать существующий файл.
update_­existing Замените существующий файл, если он старше заменяемого.
Группа опций, управляющая copy эффектами функций для подкаталогов
ПостоянныйИмея в виду
none (По умолчанию) Не копировать подкаталоги.
recursive Рекурсивно копируйте подкаталоги и их содержимое.
Группа опций, управляющая copy эффектами функций для символьных ссылок
ПостоянныйИмея в виду
none (По умолчанию) Переход по символическим ссылкам.
copy_­symlinks Копируйте символические ссылки как символические ссылки, а не копируйте файлы, на которые они указывают.
skip_­symlinks Игнорируйте символические ссылки.
Группа опций, управляющая copy эффектами функций для выбора формы копирования
ПостоянныйИмея в виду
none (По умолчанию) Копировать содержимое.
directories_­only Копировать только структуру каталогов, не копировать файлы, не являющиеся каталогами.
create_­symlinks Делайте символические ссылки вместо копий файлов. Исходный путь должен быть абсолютным, если путь назначения не находится в текущем каталоге.
create_­hard_­links Делайте жесткие ссылки вместо копий файлов.

30.10.29.4 Enum class perms [fs.enum.perms]

Таблица 125 - класс Enum perms
ИмяЦенитьPOSIXОпределение или примечания
(восьмеричный)макрос
none 0 Для файла не установлены разрешения.
owner_­read 0400 S_­IRUSR Разрешение на чтение, владелец
owner_­write 0200 S_­IWUSR Разрешение на запись, владелец
owner_­exec 0100 S_­IXUSR Разрешение на выполнение / поиск, владелец
owner_­all 0700 S_­IRWXU Читать, писать, выполнять / искать по владельцу;
owner_­read | owner_­write | owner_­exec
group_­read 040 S_­IRGRP Разрешение на чтение, группа
group_­write 020 S_­IWGRP Разрешение на запись, группа
group_­exec 010 S_­IXGRP Разрешение на выполнение / поиск, группа
group_­all 070 S_­IRWXG Чтение, запись, выполнение / поиск по группе;
group_­read | group_­write | group_­exec
others_­read 04 S_­IROTH Разрешение на чтение, другие
others_­write 02 S_­IWOTH Разрешение на запись, другие
others_­exec 01 S_­IXOTH Разрешение на выполнение / поиск, другие
others_­all 07 S_­IRWXO Читать, писать, выполнять / искать другие;
others_­read | others_­write | others_­exec
all 0777 owner_­all | group_­all | others_­all
set_­uid 04000 S_­ISUID Установить идентификатор пользователя при выполнении
set_­gid 02000 S_­ISGID Установить идентификатор группы при выполнении
sticky_­bit 01000 S_­ISVTX Зависит от операционной системы.
mask 07777 all | set_­uid | set_­gid | sticky_­bit
unknown 0xFFFF Разрешения неизвестны, например, когда file_­status объект создается без указания разрешений.

30.10.29.5 Enum class perm_­options [fs.enum.perm.opts]

Таблица 126 - класс Enum perm_­options
ИмяИмея в виду
replace permissions должен заменить биты разрешений файла на perm
add permissions должен заменить биты разрешения файла побитовым ИЛИ perm и текущими битами разрешения файла.
remove permissions должен заменить биты разрешений файла побитовым И дополнением perm и текущими битами разрешений файла.
nofollow permissions должен изменять разрешения самой символической ссылки, а не разрешения файла, к которому эта ссылка разрешает.

30.10.29.6 Enum class directory_­options [fs.enum.dir.opts]

Таблица 127 - класс Enum directory_­options
ИмяИмея в виду
none (По умолчанию) Пропускать символические ссылки на каталог, отказано в разрешении - это ошибка.
follow_­directory_­symlink Следуйте, а не пропускайте символические ссылки на каталоги.
skip_­permission_­denied Пропускать каталоги, для которых в противном случае было бы отказано в разрешении.

31.1 General [re.general]

Таблица 128 - Сводка библиотеки регулярных выражений
Подпункт Заголовок (ы)
[re.def] Определения
[re.req] Требования
[re.const] Константы
[re.badexp] Тип исключения
[re.traits] Черты
[re.regex] Шаблон регулярного выражения <regex>
[re.submatch] Подматчи
[re.results] Результаты матчей
[re.alg] Алгоритмы
[re.iter] Итераторы
[re.grammar] Грамматика

31.3 Requirements [re.req]

Таблица 129 - Требования к классам свойств регулярных выражений
ВыражениеТип возвратаУтверждение / примечание до / после условия
X​::​char_­type charT Тип символьного контейнера, используемый в реализации шаблона класса basic_­regex.
X​::​string_­type basic_­string<charT>
X​::​locale_­type Копируемый конструктивный тип Тип, представляющий локаль, используемую классом свойств.
X​::​char_­class_­type bitmask type. Тип битовой маски, представляющий определенную классификацию символов.
X​::​length(p) size_­t Дает наименьшее i такое, что p[i] == 0. Сложность линейна i .
v.translate(c) X​::​char_­type Возвращает такой символ, что для любого символа, d который должен считаться эквивалентным c then v.translate(c) == v.translate(d).
v.translate_­nocase(c) X​::​char_­type Тогда для всех символов C , которые должны считаться эквивалентными, c когда сравнения должны выполняться без учета регистра v.translate_­nocase(c) == v.translate_­nocase(C).
v.transform(F1, F2) X​::​string_­type Возвращает ключ сортировки для последовательности символов, обозначенной диапазоном итератора [F1, F2) , так что если последовательность символов [G1, G2) сортируется до последовательности символов, [H1, H2) тогда v.transform(G1, G2) < v.transform(H1, H2).
v.transform_­primary(F1, F2) X​::​string_­type Возвращает ключ сортировки для последовательности символов, обозначенной диапазоном итератора [F1, F2) , так что если последовательность символов [G1, G2) сортируется до последовательности [H1, H2) символов, тогда регистр символов не учитывается v.transform_­primary(G1, G2) < v.transform_­primary(H1, H2).
v.lookup_­collatename(F1, F2) X​::​string_­type Возвращает последовательность символов, представляющую элемент сортировки, состоящий из последовательности символов, обозначенной диапазоном итератора [F1, F2). Возвращает пустую строку, если последовательность символов не является допустимым элементом сортировки.
v.lookup_­classname(F1, F2, b) X​::​char_­class_­type Преобразует последовательность символов, указанную диапазоном итератора, [F1, F2) в значение типа битовой маски, которое впоследствии может быть передано isctype. Значения, возвращаемые из, lookup_­classname могут быть побитовыми или объединены вместе; результирующее значение представляет членство в любом из соответствующих классов символов. Если b есть true, то возвращаемая битовая маска подходит для сопоставления символов независимо от их регистра. Возвращает, 0 если последовательность символов не является именем класса символов, распознаваемого X. Возвращаемое значение не должно зависеть от регистра символов в последовательности.
v.isctype(c, cl) bool Возвращает, true если персонаж c является членом одного из классов символов, обозначенных cl, в false противном случае.
v.value(c, I) int Возвращает значение, представленное цифрой c в базе, I если символ c является допустимой цифрой в базе I; в противном случае возвращается -1. [ Note: Значение I будет только 8, 10 или 16. ] end note
u.imbue(loc) X​::​locale_­type Наполняет u языковой стандарт loc и возвращает предыдущий языковой стандарт, который использовался, u если он есть.
v.getloc() X​::​locale_­type Возвращает текущий языковой стандарт v, если таковой имеется.

31.5.1 Bitmask type syntax_­option_­type [re.synopt]

Таблица 130 - syntax_­option_­type эффекты
ЭлементЭффект (ы), если установлен
icase Указывает, что сопоставление регулярных выражений с последовательностью контейнера символов должно выполняться без учета регистра.
nosubs Указывает, что никакие подвыражения не должны считаться отмеченными, так что, когда регулярное выражение сопоставляется с последовательностью контейнера символов, совпадения подвыражений не должны сохраняться в предоставленной match_­results структуре.
optimize Указывает, что обработчик регулярных выражений должен уделять больше внимания скорости сопоставления регулярных выражений и меньше - скорости, с которой создаются объекты регулярных выражений. В противном случае это не оказывает заметного влияния на вывод программы.
collate Указывает, что диапазоны символов формы "[a-b]" должны быть чувствительны к языку.
ECMAScript Указывает, что грамматика, распознаваемая обработчиком регулярных выражений, должна соответствовать грамматике, используемой ECMAScript в ECMA-262, как изменено в [re.grammar].
basic Указывает, что грамматика, распознаваемая механизмом регулярных выражений, должна быть грамматикой, используемой базовыми регулярными выражениями в POSIX, Базовые определения и заголовки, Раздел 9, Регулярные выражения.
extended Указывает, что грамматика, распознаваемая обработчиком регулярных выражений, должна быть грамматикой, используемой расширенными регулярными выражениями в POSIX, Базовые определения и заголовки, Раздел 9, Регулярные выражения.
awk Указывает, что грамматика, распознаваемая обработчиком регулярных выражений, должна соответствовать грамматике, используемой утилитой awk в POSIX.
grep Указывает, что грамматика, распознаваемая обработчиком регулярных выражений, должна соответствовать грамматике, используемой утилитой grep в POSIX.
egrep Указывает, что грамматика, распознаваемая обработчиком регулярных выражений, должна соответствовать грамматике, используемой утилитой grep, если задана опция -E в POSIX.
multiline Указывает, что ^ должно соответствовать началу строки и $ должно соответствовать концу строки, если ECMAScript выбран двигатель.

31.5.2 Bitmask type match_­flag_­type [re.matchflag]

Таблица 131 - regex_­constants​::​match_­flag_­type эффекты при получении совпадения с последовательностью контейнера символов [first, last).
ЭлементЭффект (ы), если установлен
match_­not_­bol Первый символ в последовательности [first, last) следует рассматривать так, как будто он не находится в начале строки, поэтому символ ^ в регулярном выражении не должен совпадать [first, first).
match_­not_­eol Последний символ в последовательности [first, last) должен рассматриваться так, как если бы он не находился в конце строки, поэтому символ "$" в регулярном выражении не должен совпадать [last, last).
match_­not_­bow Выражение "\\b" не должно соответствовать подпоследовательности [first, first).
match_­not_­eow Выражение "\\b" не должно соответствовать подпоследовательности [last, last).
match_­any Если возможно более одного совпадения, то приемлемым результатом будет любое совпадение.
match_­not_­null Выражение не должно соответствовать пустой последовательности.
match_­continuous Выражение должно соответствовать только подпоследовательности, которая начинается с first.
match_­prev_­avail --first - допустимая позиция итератора. Когда этот флаг установлен, флаги match_­not_­bol и match_­not_­bow должны игнорироваться клавишами regular expression algorithms и iterators.
format_­default Когда совпадение регулярного выражения должно быть заменено новой строкой, новая строка должна быть построена с использованием правил, используемых функцией замены ECMAScript в ECMA-262, часть 15.5.4.11 String.prototype.replace. Кроме того, во время операций поиска и замены все неперекрывающиеся вхождения регулярного выражения должны быть обнаружены и заменены, а разделы ввода, которые не соответствуют выражению, должны быть скопированы без изменений в выходную строку.
format_­sed Когда совпадение регулярного выражения должно быть заменено новой строкой, новая строка должна быть построена с использованием правил, используемых утилитой sed в POSIX.
format_­no_­copy Во время операции поиска и замены разделы просматриваемой последовательности контейнеров символов, которые не соответствуют регулярному выражению, не должны копироваться в выходную строку.
format_­first_­only Если указано во время операции поиска и замены, заменяется только первое вхождение регулярного выражения.

31.5.3 Implementation-defined error_­type [re.err]

Таблица 132 - error_­type значения в локали C
ЦенитьСостояние ошибки
error_­collate Выражение содержало недопустимое имя элемента сортировки.
error_­ctype Выражение содержало недопустимое имя класса символов.
error_­escape Выражение содержало недопустимый экранированный символ или завершающий escape-символ.
error_­backref Выражение содержит недопустимую обратную ссылку.
error_­brack Выражение содержит несоответствующие [ и ].
error_­paren Выражение содержит несоответствующие ( и ).
error_­brace Выражение содержало несоответствие { и }
error_­badbrace Выражение содержит недопустимый диапазон в {} выражении.
error_­range Выражение содержит недопустимый диапазон символов, как [b-a] в большинстве кодировок.
error_­space Недостаточно памяти для преобразования выражения в конечный автомат.
error_­badrepeat Одному из *?+{ не предшествовало действительное регулярное выражение.
error_­complexity Сложность попытки сопоставления с регулярным выражением превышает заранее установленный уровень.
error_­stack Недостаточно памяти для определения соответствия регулярного выражения указанной последовательности символов.

31.7 Class template regex_­traits [re.traits]

Таблица 133 - Имена классов символов и соответствующие ctype маски
Узкое имя персонажаИмя широкого символаСоответствующее ctype_­base​::​mask значение
"alnum" L"alnum" ctype_­base​::​alnum
"alpha" L"alpha" ctype_­base​::​alpha
"blank" L"blank" ctype_­base​::​blank
"cntrl" L"cntrl" ctype_­base​::​cntrl
"digit" L"digit" ctype_­base​::​digit
"d" L"d" ctype_­base​::​digit
"graph" L"graph" ctype_­base​::​graph
"lower" L"lower" ctype_­base​::​lower
"print" L"print" ctype_­base​::​print
"punct" L"punct" ctype_­base​::​punct
"space" L"space" ctype_­base​::​space
"s" L"s" ctype_­base​::​space
"upper" L"upper" ctype_­base​::​upper
"w" L"w" ctype_­base​::​alnum
"xdigit" L"xdigit" ctype_­base​::​xdigit

31.10.1 match_­results constructors [re.results.const]

Таблица 134 - match_­results эффекты оператора присваивания
ЭлементЦенить
ready() m.ready()
size() m.size()
str(n) m.str(n) для всех целых чисел n < m.size()
prefix() m.prefix()
suffix() m.suffix()
(*this)[n] m[n] для всех целых чисел n < m.size()
length(n) m.length(n) для всех целых чисел n < m.size()
position(n) m.position(n) для всех целых чисел n < m.size()

31.11.2 regex_­match [re.alg.match]

Таблица 135 - Эффекты regex_­match алгоритма
ЭлементЦенить
m.size() 1 + e.mark_­count()
m.empty() false
m.prefix().first first
m.prefix().second first
m.prefix().matched false
m.suffix().first last
m.suffix().second last
m.suffix().matched false
m[0].first first
m[0].second last
m[0].matched true
m[n].first Для всех целых чисел 0 < n < m.size()- начало последовательности, соответствующей подвыражению n. В качестве альтернативы, если подвыражение n не участвовало в сопоставлении, тогда last.
m[n].second Для всех целых чисел 0 < n < m.size()- конец последовательности, соответствующей подвыражению n. В качестве альтернативы, если подвыражение n не участвовало в сопоставлении, тогда last.
m[n].matched Для всех целых чисел 0 < n < m.size(), true если n в совпадении участвовало подвыражение, в false противном случае.

31.11.3 regex_­search [re.alg.search]

Таблица 136 - Эффекты regex_­search алгоритма
ЭлементЦенить
m.size() 1 + e.mark_­count()
m.empty() false
m.prefix().first first
m.prefix().second m[0].first
m.prefix().matched m.prefix().first != m.prefix().second
m.suffix().first m[0].second
m.suffix().second last
m.suffix().matched m.suffix().first != m.suffix().second
m[0].first Начало последовательности символов, соответствующих регулярному выражению.
m[0].second Конец последовательности символов, соответствующей регулярному выражению.
m[0].matched true
m[n].first Для всех целых чисел 0 < n < m.size()- начало последовательности, соответствующей подвыражению n. В качестве альтернативы, если подвыражение n не участвовало в сопоставлении, тогда last.
m[n].second Для всех целых чисел 0 < n < m.size()- конец последовательности, соответствующей подвыражению n. В качестве альтернативы, если подвыражение n не участвовало в сопоставлении, тогда last .
m[n].matched Для всех целых чисел 0 < n < m.size(), true если n в совпадении участвовало подвыражение, в false противном случае.

32.1 General [atomics.general]

Таблица 137 - Сводка библиотеки Atomics
Подпункт Заголовок (ы)
[atomics.order] Порядок и последовательность
[atomics.lockfree] Замок-свободная собственность
[atomics.types.generic] Атомные типы <atomic>
[atomics.types.operations] Операции с атомными типами
[atomics.flag] Тип флага и операции
[atomics.fences] Заборы

32.6.2 Specializations for integers [atomics.types.int]

Таблица 138 - Атомарные арифметические вычисления
key Op Вычисление key Op Вычисление
add + добавление sub - вычитание
or | побитовое включение или xor ^ побитовое исключающее или
and & побитовое и

32.6.3 Partial specialization for pointers [atomics.types.pointer]

Таблица 139 - Вычисления атомарных указателей
Key Op Вычисление Key Op Вычисление
add + добавление sub - вычитание

33.1 General [thread.general]

Таблица 140 - Сводка библиотеки поддержки потоков
Подпункт Заголовок (ы)
[thread.req] Требования
[thread.threads] Потоки <thread>
[thread.mutex] Взаимное исключение <mutex>
<shared_­mutex>
[thread.condition] Переменные условия <condition_­variable>
[futures] Фьючерсы <future>

D.5 C standard library headers [depr.c.headers]

Таблица 141 - Заголовки C
<assert.h> <inttypes.h> <signal.h> <stdio.h> <wchar.h>
<complex.h> <iso646.h> <stdalign.h> <stdlib.h> <wctype.h>
<ctype.h> <limits.h> <stdarg.h> <string.h>
<errno.h> <locale.h> <stdbool.h> <tgmath.h>
<fenv.h> <math.h> <stddef.h> <time.h>
<float.h> <setjmp.h> <stdint.h> <uchar.h>

D.6.1.1 strstreambuf constructors [depr.strstreambuf.cons]

Таблица 142 - strstreambuf(streamsize) эффекты
ЭлементЦенить
strmode dynamic
alsize alsize_­arg
palloc нулевой указатель
pfree нулевой указатель

D.6.1.1 strstreambuf constructors [depr.strstreambuf.cons]

Таблица 143 - strstreambuf(void* (*)(size_­t), void (*)(void*)) эффекты
ЭлементЦенить
strmode dynamic
alsize неуказанное значение
palloc palloc_­arg
pfree pfree_­arg

D.6.1.1 strstreambuf constructors [depr.strstreambuf.cons]

Таблица 144 - strstreambuf(charT*, streamsize, charT*) эффекты
ЭлементЦенить
strmode 0
alsize неуказанное значение
palloc нулевой указатель
pfree нулевой указатель

D.6.1.3 strstreambuf overridden virtual functions [depr.strstreambuf.virtuals]

Стол 145 - seekoff позиционирование
УсловияРезультат
(which & ios​::​in) != 0 позиционирует входную последовательность
(which & ios​::​out) != 0 позиционирует выходную последовательность
(which & (ios​::​in |
ios​::​out)) == (ios​::​in |
ios​::​out)) и
way == либо,
ios​::​beg либо
ios​::​end
позиционирует как входную, так и выходную последовательности
Иначе операция позиционирования не выполняется.

D.6.1.3 strstreambuf overridden virtual functions [depr.strstreambuf.virtuals]

Таблица 146 - newoff значения
Состояниеnewoff Ценить
way == ios​::​beg 0
way == ios​::​cur следующий указатель минус указатель начала ( xnext - xbeg).
way == ios​::​end seekhigh минус начальный указатель ( seekhigh - xbeg).