Spec-Zone.ru › C++

Стандартная библиотека C++

Стандартная библиотека C++ предоставляет широкий набор средств, доступных в стандартном C++.

Категория

Библиотека поддержки языка предоставляет компоненты, необходимые для определённых частей языка C++, таких как выделение памяти (new/delete) и обработка исключений.

Библиотека концепций описывает компоненты библиотеки, которые программы на C++ могут использовать для проверки аргументов шаблонов во время компиляции и выбора функций на основе свойств типов.

(начиная с C++20)

Библиотека диагностики предоставляет единообразную основу для сообщения об ошибках в программе на C++, включая предопределённые классы исключений.

Библиотека управления памятью предоставляет компоненты для управления памятью, включая умные указатели и ограниченный аллокатор(начиная с C++11).

Библиотека метапрограммирования описывает средства, применяемые в шаблонах и при вычислении константных выражений, включая характеристики типов, последовательности целых чисел,(начиная с C++14) и рациональную арифметику.

(начиная с C++11)

Библиотека утилит общего назначения включает компоненты, используемые другими элементами библиотеки, например предопределённый аллокатор хранилища для управления динамическим хранилищем, а также компоненты, используемые в качестве инфраструктуры в программах на C++, например кортежи и(начиная с C++11) обёртки функций.

Библиотеки контейнеров, итераторов, диапазонов(начиная с C++20) и алгоритмов предоставляют программам на C++ доступ к некоторому набору наиболее часто используемых алгоритмов и структур данных.

Библиотека строк предоставляет средства для работы с текстом, представленным однородными последовательностями следующих типов: char, char8_t(начиная с C++20), char16_t, char32_t(начиная с C++11), wchar_t и любых других типов, подобных символьным.

Библиотека обработки текста предоставляет средства для сопоставления и поиска с помощью регулярных выражений(начиная с C++11), утилиты для форматирования текста(начиная с C++20) и определения кодировок текста(начиная с C++26), а также средства локализации.

Библиотека числовых операций предоставляет числовые алгоритмы и компоненты для работы с комплексными числами, расширяющие возможности числовой обработки. Компонент valarray предоставляет средства для обработки по n элементов за раз, которая потенциально может реализовываться как параллельные операции на платформах, поддерживающих такую обработку. Компонент генерации случайных чисел предоставляет средства для генерации псевдослучайных чисел.(начиная с C++11)

Библиотека времени предоставляет универсальные средства для работы со временем.

Библиотека ввода-вывода предоставляет компоненты iostream, являющиеся основным механизмом ввода и вывода данных в программах на C++. Их можно использовать с другими элементами библиотеки, в частности со строками, локалями и итераторами.

Библиотека поддержки потоков предоставляет компоненты для создания потоков и управления ими, включая атомарные операции, взаимное исключение и межпоточное взаимодействие.

(начиная с C++11)

Библиотека поддержки выполнения предоставляет основу для управления асинхронным выполнением на универсальных ресурсах выполнения.

(начиная с C++26)

Содержимое библиотеки

Стандартная библиотека C++ предоставляет определения для сущностей и макросов, описанных в кратких изложениях заголовков стандартной библиотеки C++, если не указано иное.

Все сущности библиотеки, кроме operator new и operator delete, определены в пространстве имён std или в пространствах имён, вложенных в пространство имён std (за исключением сущностей средств стандартной библиотеки C, см. ниже).Не указано, объявляются ли имена, объявленные в определённом пространстве имён, непосредственно в нём или во встраиваемом пространстве имён внутри него.(начиная с C++11)

Заголовки

Каждый элемент стандартной библиотеки C++ объявляется или определяется (в зависимости от ситуации) в заголовке. Заголовок не обязательно является исходным файлом, а последовательности, ограниченные < и > в именах заголовков, не обязательно являются допустимыми именами исходных файлов.

Стандартная библиотека C++ предоставляет заголовки библиотеки C++ и дополнительные заголовки C++ для средств библиотеки C (описания см. на странице «заголовки):

Заголовки библиотеки C++
<algorithm> <iomanip> <list> <ostream> <streambuf>
<bitset> <ios> <locale> <queue> <string>
<complex> <iosfwd> <map> <set> <typeinfo>
<deque> <iostream> <memory> <sstream> <utility>
<exception> <istream> <new> <stack> <valarray>
<fstream> <iterator> <numeric> <stdexcept> <vector>
<functional> <limits>
Заголовки, добавленные в C++11
<array> <condition_variable> <mutex> <scoped_allocator> <type_traits>
<atomic> <forward_list> <random> <system_error> <typeindex>
<chrono> <future> <ratio> <thread> <unordered_map>
<codecvt> <initializer_list> <regex> <tuple> <unordered_set>
Заголовки, добавленные в C++14
<shared_mutex>
Заголовки, добавленные в C++17
<any> <execution> <memory_resource> <string_view> <variant>
<charconv> <filesystem> <optional>
Заголовки, добавленные в C++20
<barrier> <concepts> <latch> <semaphore> <stop_token>
<bit> <coroutine> <numbers> <source_location> <syncstream>
<compare> <format> <ranges> <span> <version>
Заголовки, добавленные в C++23
<expected> <flat_set> <mdspan> <spanstream> <stdfloat>
<flat_map> <generator> <print> <stacktrace>
Заголовки, добавленные в C++26
<contracts> <hazard_pointer> <inplace_vector> <rcu> <text_encoding>
<debugging> <hive> <linalg> <simd>
Удалённые заголовки
<codecvt> (начиная с C++11)(устарел в C++17)(удалён в C++26)
<strstream> (устарел в C++98)(удалён в C++26)
Заголовки C++ для средств библиотеки C
<cassert> <clocale> <cstdarg> <cstring>
<cctype> <cmath> <cstddef> <ctime>
<cerrno> <csetjmp> <cstdio> <cwchar>
<cfloat> <csignal> <cstdlib> <cwctype>
<climits>
Заголовки, добавленные в C++11
<cfenv> <cinttypes> <cstdint> <cuchar>
Удалённые заголовки
<ccomplex> (начиная с C++11)(устарел в C++17)(удалён в C++20)
<ciso646> (удалён в C++20)
<cstdalign> (начиная с C++11)(устарел в C++17)(удалён в C++20)
<cstdbool> (начиная с C++11)(устарел в C++17)(удалён в C++20)
<ctgmath> (начиная с C++11)(устарел в C++17)(удалён в C++20)

Автономная реализация имеет определяемый реализацией набор заголовков; минимальные требования к набору заголовков см. здесь.

Стандартная библиотека C

Стандартная библиотека C++ также предоставляет средства стандартной библиотеки C, соответствующим образом адаптированные для обеспечения статической типобезопасности. Семантика многих библиотечных функций описывается со ссылкой на стандартную библиотеку C.

В некоторых случаях сигнатуры, заданные в стандартном C++, могут отличаться от сигнатур в стандартной библиотеке C, а также могут объявляться дополнительные перегрузки, но поведение и предусловия (включая подразумеваемые restrict в C)(начиная с C++17) совпадают, если не указано иное.

Для совместимости со стандартной библиотекой C стандартная библиотека C++ предоставляет перечисленные ниже заголовки C. Эти заголовки предназначены только для обеспечения взаимодействия. Исходным файлам C++ может потребоваться включить один из таких заголовков, чтобы быть допустимыми файлами ISO C. Исходные файлы, которые не должны быть также допустимыми файлами ISO C, не должны использовать заголовки C. Описания см. здесь.

Заголовки C
<assert.h> <limits.h> <stdarg.h> <string.h>
<ctype.h> <locale.h> <stddef.h> <time.h>
<errno.h> <math.h> <stdio.h> <wchar.h>
<float.h> <setjmp.h> <stdlib.h> <wctype.h>
<iso646.h> <signal.h>
Заголовки, добавленные в C++11
<complex.h> <inttypes.h> <stdbool.h> <tgmath.h>
<fenv.h> <stdalign.h> <stdint.h> <uchar.h>
Заголовки, добавленные в C++23
<stdatomic.h>
Заголовки, добавленные в C++26
<stdbit.h> <stdckdint.h>

Если не указано иное, содержимое каждого заголовка cxxx совпадает с содержимым соответствующего заголовка xxx.h, описанного в стандартной библиотеке C. Однако в стандартной библиотеке C++ объявления (за исключением имён, определённых в C как макросы) находятся в области пространства имён std. Не указано, объявляются ли эти имена (включая добавленные перегрузки) сначала в глобальной области пространства имён, а затем вводятся в пространство имён std посредством явных объявлений using.

Имена, определённые в C как макросы (assert, offsetof, setjmp, va_arg, va_end и va_start), должны быть определены как макросы в стандартной библиотеке C++, даже если стандарт C допускает их реализацию в виде функций.

Имена, определённые в C как функции, должны быть определены как функции в стандартной библиотеке C++. Это запрещает практику, допустимую в C, когда помимо прототипа функции предоставляется макрос, подменяющий её. Единственный способ обеспечить эквивалентное поведение встраивания в C++ — предоставить определение в виде внешней встраиваемой функции.

Идентификаторы, являющиеся ключевыми словами или операторами в C++, нельзя определять как макросы в заголовках стандартной библиотеки C++. В частности, включение стандартного заголовка <iso646.h> не оказывает никакого эффекта.

Имена, связанные с безопасными функциями в стандартном C (начиная с C++17)

Если включён любой заголовок C++, определяется реализацией, объявляется ли какое-либо из следующих имён из приложения K стандарта C в глобальном пространстве имён (ни одно из них не объявляется в пространстве имён std):

Имена из приложения K стандарта C
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
gets_s sscanf_s vprintf_s wmemcpy_s
gmtime_s mbstowcs_s vscanf_s vswscanf_s
abort_handler_s strcat_s vsnprintf_s wmemmove
ignore_handler_s strcpy_s vsnwprintf_s wprintf_s
localtime_s strerrorlen_s vsprintf_s wscanf_s
L_tmpnam_s strerror_s vsscanf_s
mbsrtowcs_s strlen_s vswprintf_s

Использование библиотеки

Подключение заголовков

Сущности стандартной библиотеки C++ определены в заголовках; их содержимое становится доступным единице трансляции, когда она содержит соответствующую препроцессорную директиву #include.

Единица трансляции может подключать заголовки библиотеки в любом порядке. Каждый заголовок можно подключать несколько раз без эффекта, отличного от его однократного подключения, за исключением того, что эффект подключения <cassert> или <assert.h> каждый раз зависит от лексически текущего определения NDEBUG.

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

В модульных единицах заголовки можно подключать только в глобальных фрагментах модуля.

(начиная с C++20)

Импорт заголовков

Заголовки библиотеки C++ или, для свободно стоящей реализации, подмножество таких заголовков, предоставляемое реализацией, в совокупности называются импортируемыми заголовками библиотеки C++.

Содержимое импортируемых заголовков библиотеки C++ становится доступным единице трансляции, когда она содержит соответствующее объявление импорта.

(начиная с C++20)

Импорт модулей

Стандартная библиотека C++ предоставляет следующие модули библиотеки C++:

  • Именованный модуль std экспортирует объявления в пространстве имён std, предоставляемые импортируемыми заголовками библиотеки C++ (например, std::rotr из <bit>), а также заголовками C++ для средств библиотеки C (например, std::puts из <cstdio>). Кроме того, он экспортирует объявления в глобальном пространстве имён для функций выделения и освобождения памяти, предоставляемых <new> (например, ::operator new).
  • Именованный модуль std.compat экспортирует те же объявления, что и именованный модуль std, а также объявления в глобальном пространстве имён, соответствующие объявлениям в пространстве имён std, предоставляемым заголовками C++ для средств библиотеки C (например, ::fclose).

Для каждого объявления стандартной библиотеки:

  • модуль, к которому оно присоединено, не определён; и
  • оно обозначает ту же сущность, независимо от того, стала ли она доступной в результате подключения заголовка, импорта единицы заголовка или импорта модуля библиотеки C++.
(начиная с C++23)

Связывание

Сущности стандартной библиотеки C++ имеют длительность хранения#внешнее связывание. Если не указано иное, объекты и функции имеют связывание по умолчанию extern"C++".

Связывание имён из стандартной библиотеки C, объявленных с внешним связыванием, — extern"C" или extern"C++" — определяется реализацией. Стандарт C++ рекомендует в этом случае использовать extern"C++".

Объекты и функции, определённые в библиотеке и необходимые программе на C++, включаются в программу до её запуска.

Требования к реализациям стандартной библиотеки

Гарантии

Заголовок C++ должен предоставлять объявления и определения, содержащиеся в:

  • сводке этого заголовка; или
  • сводке другого заголовка, который, по-видимому, подключается в сводке этого заголовка.

Для типов и макросов, определённых в нескольких заголовках (например, NULL), подключение любого количества этих заголовков в любом порядке никогда не нарушает правило одного определения.

Если не указано иное, все объектоподобные макросы, определённые стандартной библиотекой C и раскрывающиеся в целочисленные константные выражения, можно использовать в директивах препроцессора #if.

Вызов сигнатуры нестатической функции стандартной библиотеки всегда приводит к фактическому вызову этой функции. Поэтому соответствующая стандарту реализация стандартной библиотеки не может определять дополнительные нестатические функции, которые может вызвать допустимая программа на C++.

Сигнатуры нестатических функций никогда не объявляются с дополнительными аргументами по умолчанию.

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

Для каждого объявления friend функции (шаблона) внутри определения класса (шаблона) никакого другого объявления этой функции (шаблона) не предоставляется.

Сигнатуры функций стандартной библиотеки можно объявлять как constexpr, только если они обязаны быть constexpr (libstdc++ cmath в этом отношении явно не соответствует стандарту). Если заголовок предоставляет какие-либо не определяющие функции или конструкторы constexpr, соответствующие определения также должны предоставляться в этом заголовке.

Если не указано иное, каждая функция стандартной библиотеки должна удовлетворять следующим требованиям, чтобы предотвращать состояния гонки:

  • Функция стандартной библиотеки C++ не может прямо или косвенно обращаться к объектам, доступным потокам, отличным от текущего, если только доступ к объектам не осуществляется прямо или косвенно через аргументы функции, включая this.
  • Функция стандартной библиотеки C++ не может прямо или косвенно изменять объекты, доступные потокам, отличным от текущего, если только доступ к объектам не осуществляется прямо или косвенно через неконстантные аргументы функции, включая this.
    • Например, объект с длительностью хранения static нельзя использовать для внутренних целей без синхронизации, поскольку это может привести к состоянию гонки даже в программах, которые явно не разделяют объекты между потоками.
  • Функция стандартной библиотеки C++ не может обращаться к объектам, доступным косвенно через её аргументы или через элементы её аргументов-контейнеров контейнерного типа, иначе как посредством вызова функций, которые согласно спецификации должны применяться к элементам этих контейнеров.
  • Операция над итераторами, полученными вызовом функции-члена контейнера или строки стандартной библиотеки, может обращаться к базовому контейнеру, но не изменять его.
    • В частности, операции с контейнером, инвалидирующие итераторы, конфликтуют с операциями над итераторами, связанными с этим контейнером.
  • Функция стандартной библиотеки C++ может выполнять операции исключительно в пределах текущего потока только в том случае, если эффекты этих операций видимы пользователям.
    • Операции без видимых побочных эффектов могут выполняться параллельно.
(начиная с C++11)

Для каждого класса, определённого в стандартной библиотеке C++ и обязанного быть производным от другого класса, определённого в стандартной библиотеке C++:

  • базовый класс должен быть виртуальным, если он указан как virtual;
  • базовый класс не может быть виртуальным, если он не указан как virtual; и
  • если не указано иное, типы с различными именами должны быть различными типами.

Если не указано иное, все типы, указанные в стандартной библиотеке C++, являются не-финальными.

(начиная с C++11)

Если указано, что функция, определённая в стандартной библиотеке C++, выбрасывает исключение (в определённой ситуации) заданного типа, выброшенное исключение может иметь только этот тип или производный от него тип, чтобы обработчик исключений для базового типа мог его перехватить.

Функции стандартной библиотеки C могут выбрасывать исключения только в тех случаях, когда такая функция вызывает предоставленную программой функцию, выбрасывающую исключение (qsort() и bsearch() удовлетворяют этому условию).

Операции деструкторов, определённых в стандартной библиотеке C++, никогда не выбрасывают исключения. Каждый деструктор стандартной библиотеки C++ ведёт себя так, как если бы для него была задана спецификация исключений без выбрасывания.

Если функция стандартной библиотеки C++ сообщает об ошибках с помощью объекта std::error_code, его член category() должен возвращать std::system_category() для ошибок, возникших в операционной системе, или ссылку на объект std::error_category, определяемый реализацией, для ошибок, возникших в другом месте. Возможные значения value() для каждой из этих категорий ошибок должны быть определены.

Объекты типов, определённых в стандартной библиотеке C++, можно перемещать. Операции перемещения могут быть явно указаны или неявно сгенерированы. Если не указано иное, такие перемещённые объекты переводятся в допустимое, но не специфицированное состояние.

Объект типа, определённого в стандартной библиотеке C++, можно переместить самому себе. Если не указано иное, такое присваивание переводит объект в допустимое, но не специфицированное состояние.

(начиная с C++11)

Свобода реализации

Не определено, определены ли какие-либо функции-члены или нестатические функции стандартной библиотеки C++ как inline.

Для невиртуальной функции-члена стандартной библиотеки C++ можно объявить другой набор сигнатур функций-членов при условии, что любой вызов этой функции-члена, который выбрал бы перегрузку из заданного набора объявлений, ведёт себя так, как если бы была выбрана эта перегрузка. Это, например, позволяет:

  • добавлять параметры с аргументами по умолчанию;
  • заменять функцию-член с аргументами по умолчанию двумя или более функциями-членами с эквивалентным поведением; или
  • добавлять дополнительные сигнатуры для имени функции-члена.

Если не указано иное, выбор функций стандартной библиотеки C++, которые могут быть рекурсивно повторно вызваны, определяется реализацией.

Реализации стандартной библиотеки C++ могут совместно использовать собственные внутренние объекты между потоками, если эти объекты не видны пользователям и защищены от состояний гонки.

(начиная с C++11)

Не определено, является ли какая-либо сигнатура функции или класс стандартной библиотеки C++ другом другого класса стандартной библиотеки C++.

Имена и сигнатуры глобальных функций, описанные здесь, зарезервированы для реализации.

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

Если для функции, определённой в стандартной библиотеке C++, не указано, что она выбрасывает исключение, но для неё не задана спецификация исключений без выбрасывания, тип выброшенного исключения определяется реализацией, однако он должен быть std::exception или типом, производным от std::exception.

Спецификацию исключений невиртуальной функции можно усилить, добавив спецификацию исключений без выбрасывания.

Усиление защиты стандартной библиотеки

Реализация может быть защищённой реализацией ; является ли реализация защищённой, определяется реализацией.

Для некоторых функций стандартной библиотеки (и шаблонов функций) заданы защищённые предусловия . При вызове такой функции:

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

Функции с защищёнными предусловиями

- у всех перегрузок есть защищённые предусловия
- у некоторых перегрузок есть защищённые предусловия
Категория Контейнеры последовательностей Представления контейнеров Утилиты диапазонов Адаптеры итераторов Классы строк (представлений строк) Общие утилиты Трассировка стека Умные указатели Числовые массивы
Класс array vector inplace_vector deque list forward_list span mdspan view_interface common_iterator counted_iterator basic_string basic_string_view bitset optional expected basic_stacktrace shared_ptr valarray
Создание конструктор span mdspan common_iterator counted_iterator
статический вспомогательный метод current
Доступ к элементам operator* operator* operator* operator* operator*
operator-> operator-> operator-> operator->
operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[]
front front front front front front front front front front front
back back back back back back back back back back
error error
Подпредставления first first
last last
subspan subspan
Модификаторы operator= operator=
operator+= operator+=
operator-= operator-=
operator++ operator++ operator++
pop_front pop_front pop_front pop_front
pop_back pop_back pop_back pop_back pop_back pop_back
remove_prefix remove_prefix
remove_suffix remove_suffix
Нечлен-функции operator== operator==
operator- operator-
iter_move iter_move iter_move
iter_swap iter_swap iter_swap
(начиная с C++26)

Примечания

Макрос проверки функций Значение Стандарт Возможность
__cpp_lib_modules 202207L (C++23) Модули стандартной библиотеки std и std.compat
Только для усиленной реализации
__cpp_lib_hardened_array 202502L (C++26) Усиленный std::array
__cpp_lib_hardened_basic_stacktrace 202506L (C++26) Усиленный std::basic_stacktrace
__cpp_lib_hardened_basic_string 202502L (C++26) Усиленный std::basic_string
__cpp_lib_hardened_basic_string_view 202502L (C++26) Усиленный std::basic_string_view
__cpp_lib_hardened_bitset 202502L (C++26) Усиленный std::bitset
__cpp_lib_hardened_common_iterator 202506L (C++26) Усиленный std::common_iterator
__cpp_lib_hardened_counted_iterator 202506L (C++26) Усиленный std::counted_iterator
__cpp_lib_hardened_deque 202502L (C++26) Усиленный std::deque
__cpp_lib_hardened_expected 202502L (C++26) Усиленный std::expected
__cpp_lib_hardened_forward_list 202502L (C++26) Усиленный std::forward_list
__cpp_lib_hardened_inplace_vector 202502L (C++26) Усиленный std::inplace_vector
__cpp_lib_hardened_list 202502L (C++26) Усиленный std::list
__cpp_lib_hardened_mdspan 202502L (C++26) Усиленный std::mdspan
__cpp_lib_hardened_optional 202502L (C++26) Усиленный std::optional
__cpp_lib_hardened_shared_ptr 202506L (C++26) Усиленный std::shared_ptr
__cpp_lib_hardened_span 202502L (C++26) Усиленный std::span
__cpp_lib_hardened_valarray 202502L (C++26) Усиленный std::valarray
__cpp_lib_hardened_vector 202502L (C++26) Усиленный std::vector
__cpp_lib_hardened_view_interface 202506L (C++26) Усиленный std::ranges::view_interface

Пример

import std;

struct Str : std::string // OK, std::string cannot be final
{
    ~Str(); // Guaranteed to be noexcept
};

int main()
{
    std::puts("Hello stdlib!");
    // ::puts("Hello stdlib!"); // Requires std.compat module or stdio.h header

    // constexpr auto& void_info = std::any().type(); // any::type cannot be constexpr

    std::string p, q;
    q = std::move(p); // OK, p is left in a valid (but unspecified) state
                      // This includes self move assignment q = std::move(q)

    // return EXIT_SUCCESS; // Macro EXIT_SUCCESS is not provided by either stdlib module
}

Вывод:

Hello stdlib!

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были ретроспективно применены к ранее опубликованным стандартам C++.

DR Применяется к Поведение согласно опубликованной версии Корректное поведение
LWG 1 C++98 языковые связи имён из
стандартной библиотеки C не были заданы
они определяются
реализацией
LWG 119 C++98 спецификации исключений виртуальных
функций можно было ужесточать
это разрешено только для
невиртуальных функций
LWG 147 C++98 спецификация для функций, не являющихся членами,
учитывала только глобальные функции
также учитывает
неглобальные функции
LWG 225 C++98 функции стандартной библиотеки могли вызывать функции, не являющиеся членами,
из других пространств имён из-за поиска с учётом аргументов
запрещено, если
не указано иное
LWG 336 C++98 <strstream> не являлся заголовком библиотеки C++ это заголовок библиотеки C++
LWG 343 C++98 зависимости заголовков библиотеки не были определены определены (перечислены в сводках)
LWG 456 C++98 заголовки C++ для средств библиотеки C могли
предоставлять определения только в пространстве имён std
разрешено определять в глобальном пространстве имён,
а затем добавлять в пространство имён std
LWG 465 C++98 идентификаторы, являющиеся ключевыми словами или операторами в C++, могли
определяться как макросы в заголовках стандартной библиотеки C++
(только <ciso646> не должен определять их как макросы)
все заголовки стандартной
библиотеки C++ не могут
определять их как макросы
LWG 1178 C++98 заголовки C++ должны включать заголовок C++,
содержащий все необходимые определения
заголовки C++ должны предоставлять объявления
и определения, прямо или косвенно
включённые в их сводку
LWG 2013 C++11 не было определено, могут ли функции, которые стандарт
не обязывает быть constexpr,
объявляться стандартной библиотекой как constexpr
запрещено
LWG 2225 C++98 требовалось диагностическое сообщение, если заголовок
включён в неправильном месте
в этом случае диагностическое сообщение
не требуется

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/standard_library

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API