Библиотека концептов (C++20)
Библиотека концептов предоставляет определения основных концептов библиотеки, которые можно использовать для выполнения проверки аргументов шаблона во время компиляции и выполнения диспетчеризации функций на основе свойств типов. Эти концепты обеспечивают основу для логического мышления в программах.
Большинство концептов стандартной библиотеки налагают как синтаксические, так и семантические требования. Говорят, что стандартный концепт удовлетворяется, если удовлетворяются его синтаксические требования, и моделируется, если он удовлетворяется, и его семантические требования (если таковые имеются) также выполняются.
Как правило, компилятор может проверить только синтаксические требования. Если достоверность или значение программы зависит от того, моделирует ли последовательность аргументов шаблона концепт, и концепт удовлетворяется, но не моделируется, или если семантическое требование не выполняется в точке использования, программа некорректна, диагностика не требуется.
Концепты | ||
| Определены в пространстве имён
std | ||
Основные языковые концепты | ||
| Определены в заголовочном файле
<concepts> | ||
| (C++20) |
указывает, что тип совпадает с другим типом (концепт) | |
| (C++20) |
указывает, что тип является производным от другого типа (концепт) | |
| (C++20) |
указывает, что тип неявно преобразуется в другой тип (концепт) | |
| (C++20) |
указывает, что два типа имеют общий ссылочный тип (концепт) | |
| (C++20) |
указывает, что два типа имеют общий тип (концепт) | |
| (C++20) |
указывает, что тип является целым типом (концепт) | |
| (C++20) |
указывает, что тип является целочисленным типом со знаком (концепт) | |
| (C++20) |
указывает, что тип является целым беззнаковым типом (концепт) | |
| (C++20) |
указывает, что тип, это число с плавающей точкой (концепт) | |
| (C++20) |
указывает, что типу может быть присвоен другой тип (концепт) | |
| (C++20) |
указывает, что тип можно поменять местами или что два типа можно поменять местами друг с другом (концепт) | |
| (C++20) |
указывает, что объект данного типа может быть уничтожен (концепт) | |
| (C++20) |
указывает, что переменная типа может быть создана из набора типов аргументов или привязана к ним (концепт) | |
| (C++20) |
указывает, что объект типа может быть сконструирован по умолчанию (концепт) | |
| (C++20) |
указывает, что объект типа может быть сконструирован перемещением (концепт) | |
| (C++20) |
указывает, что объект типа может быть создан копированием и перемещением (концепт) | |
Концепты сравнения | ||
| Определены в заголовочном файле
<concepts> | ||
| (C++20) |
указывает, что тип может использоваться в логических контекстах (концепт только для экспозиции) | |
| указывает, что оператор == является отношением эквивалентности (концепт) | ||
| указывает, что операторы сравнения для типа дают общий порядок (концепт) | ||
| Определены в заголовочном файле
<compare> | ||
| указывает, что оператор <=> даёт согласованный результат для данных типов (концепт) | ||
Концепты объекта | ||
| Определены в заголовочном файле
<concepts> | ||
| (C++20) |
указывает, что объект типа можно перемещать и менять местами (концепт) | |
| (C++20) |
указывает, что объект типа можно копировать, перемещать и менять местами (концепт) | |
| (C++20) |
указывает, что объект типа можно копировать, перемещать, менять местами и создавать по умолчанию (концепт) | |
| (C++20) |
указывает, что тип является регулярным, то есть одновременно semiregular и equality_comparable (концепт) | |
Вызываемые концепты | ||
| Определены в заголовочном файле
<concepts> | ||
| (C++20) |
указывает, что вызываемый тип может быть вызван с заданным набором типов аргументов (концепт) | |
| (C++20) |
указывает, что вызываемый тип является логическим предикатом (концепт) | |
| (C++20) |
указывает, что вызываемый тип является бинарным отношением (концепт) | |
| (C++20) |
указывает, что relation накладывает отношение эквивалентности (концепт) | |
| (C++20) |
указывает, что relation налагает строгий слабый порядок (концепт) | |
Точки кастомизации объектов | ||
| (C++20) |
обменивает значения двух объектов (объект точки настройки) | |
Дополнительные концепты можно найти в библиотеке итераторов, библиотеке алгоритмов и библиотеке диапазонов.

