Макросы проверки возможностей (начиная с C++20)
Стандарт определяет набор макросов препроцессора, соответствующих языку C++ и возможностям библиотеки, представленным в C++11 или новее. Они предназначены как простой и портабельный способ проверки наличия указанных возможностей.
Атрибуты
__has_cpp_attribute( маркер-атрибута )
|
|||||||||
Проверяет поддержку атрибута с именем маркер-атрибута (после раскрытия макроса).
Для каждого стандартного атрибута реализация определяет, расширяется ли __has_cpp_attribute до значения, указанного в таблице ниже (это год и месяц, в которых атрибут был добавлен в рабочий проект) или 0. Он расширится до заданного значения в таблице тогда и только тогда, когда стандартный атрибут заставляет реализацию вести себя так, как рекомендовано (выдача диагностических сообщений, влияние на структуру классов и т.д.).
Наличие атрибутов, специфичных для поставщика, определяется ненулевым значением.
__has_cpp_attribute можно разложить на выражение
#if и
#elif.
Он рассматривается как определённый макрос для
#ifdef,
#ifndef,
#elifdef,
#elifndef (начиная с C++23) и defined, но не может быть использован где-либо еще.
| маркер-атрибута | Атрибут | Значение | Стандарт | Документ(ы) |
|---|---|---|---|---|
assume
|
[[assume]]
|
202207L
|
(C++23) | P1774R8 |
carries_dependency
|
[[carries_dependency]]
|
200809L
|
(C++11) | N2556, N2643 |
deprecated
|
[[deprecated]]
|
201309L
|
(C++14) | N3760 |
fallthrough
|
[[fallthrough]]
|
201603L
|
(C++17) | P0188R1 |
likely
|
[[likely]]
|
201803L
|
(C++20) | P0479R5 |
maybe_unused
|
[[maybe_unused]]
|
201603L
|
(C++17) | P0212R1 |
no_unique_address
|
[[no_unique_address]]
|
201803L
|
(C++20) | P0840R2 |
nodiscard
|
[[nodiscard]]
|
201603L
|
(C++17) | P0189R1 |
201907L
|
(C++20) | P1301R4 | ||
noreturn
|
[[noreturn]]
|
200809L
|
(C++11) | N2761 |
unlikely
|
[[unlikely]]
|
201803L
|
(C++20) | P0479R5 |
| Общее количество атрибутов: 10 | ||||
Возможности языка
Следующие макросы предопределены в каждой единице трансляции. Каждый макрос расширяется до целочисленного литерала, соответствующего году и месяцу, когда соответствующая возможность была включена в рабочий черновик.
Когда возможность значительно изменится, макрос будет обновлён соответствующим образом.
| Имя макроса | Возможность | Значение | Стд |
|---|---|---|---|
__cpp_aggregate_bases |
Агрегирование классов с базовыми классами | 201603L |
(C++17) |
__cpp_aggregate_nsdmi |
Агрегирование классов с инициализаторами элементов по умолчанию | 201304L |
(C++14) |
__cpp_aggregate_paren_init |
Агрегированная инициализация в форме прямой инициализации | 201902L |
(C++20) |
__cpp_alias_templates |
Шаблоны псевдонимов | 200704L |
(C++11) |
__cpp_aligned_new |
Динамическое выделение памяти для данных с нестандартным выравниванием | 201606L |
(C++17) |
__cpp_attributes |
Атрибуты | 200809L |
(C++11) |
__cpp_binary_literals |
Двоичные литералы | 201304L |
(C++14) |
__cpp_capture_star_this |
Лямбда-захват *this по значению как [=,*this] | 201603L |
(C++17) |
__cpp_char8_t |
char8_t | 201811L |
(C++20) |
__cpp_concepts |
Концепты | 201907L |
(C++20) |
__cpp_conditional_explicit |
explicit(bool) |
201806L |
(C++20) |
__cpp_consteval |
Немедленно выполняемые функции | 201811L |
(C++20) |
__cpp_constexpr |
constexpr | 200704L |
(C++11) |
Ослабленный constexpr, не-const constexpr методы |
201304L |
(C++14) | |
| Constexpr лямбда | 201603L |
(C++17) | |
| Тривиальный инициализация по умолчанию и объявление asm в constexpr функциях | 201907L |
(C++20) | |
__cpp_constexpr_dynamic_alloc |
Операции для динамической длительности хранения в constexpr функциях | 201907L |
(C++20) |
__cpp_constexpr_in_decltype |
Создание определений функций и переменных, когда они необходимы для вычисления константы | 201711L |
(C++20) |
__cpp_constinit |
constinit | 201907L |
(C++20) |
__cpp_decltype |
decltype | 200707L |
(C++11) |
__cpp_decltype_auto |
Вывод типа возвращаемого значения для обычных функций | 201304L |
(C++14) |
__cpp_deduction_guides |
Вывод аргументов шаблона для шаблонов классов | 201703L |
(C++17) |
| CTAD для агрегатов и псевдонимов | 201907L |
(C++20) | |
__cpp_delegating_constructors |
Делегирование конструкторов | 200604L |
(C++11) |
__cpp_designated_initializers |
Назначенный инициализатор | 201707L |
(C++20) |
__cpp_enumerator_attributes |
Атрибуты для нумераторов | 201411L |
(C++17) |
__cpp_fold_expressions |
Выражения свёртки | 201603L |
(C++17) |
__cpp_generic_lambdas |
Общие лямбда-выражения | 201304L |
(C++14) |
| Знакомый синтаксис шаблона для общих лямбд | 201707L |
(C++20) | |
__cpp_guaranteed_copy_elision |
Гарантированный пропуск копирования за счёт упрощённой категории значений | 201606L |
(C++17) |
__cpp_hex_float |
Шестнадцатеричные литералы с плавающей запятой | 201603L |
(C++17) |
__cpp_if_consteval |
consteval if |
202106L |
(C++23) |
__cpp_if_constexpr |
constexpr if |
201606L |
(C++17) |
__cpp_impl_coroutine |
Сопрограммы (поддержка компилятором) | 201902L |
(C++20) |
__cpp_impl_destroying_delete |
Уничтожающий оператор delete (поддержка компилятором) | 201806L |
(C++20) |
__cpp_impl_three_way_comparison |
Трёхстороннее сравнение (поддержка компилятором) | 201907L |
(C++20) |
__cpp_inheriting_constructors |
Наследование конструкторов | 200802L |
(C++11) |
| Переделка наследуемых конструкторов | 201511L |
(C++17) | |
__cpp_init_captures |
Захват при инициализации лямбда | 201304L |
(C++14) |
| Разрешено расширение пакета в захвате при инициализации лямбда | 201803L |
(C++20) | |
__cpp_initializer_lists |
Список инициализации и std::initializer_list | 200806L |
(C++11) |
__cpp_inline_variables |
Встроенные переменные | 201606L |
(C++17) |
__cpp_lambdas |
Лямбда-выражения | 200907L |
(C++11) |
__cpp_modules |
Модули | 201907L |
(C++20) |
__cpp_namespace_attributes |
Атрибуты для пространств имён | 201411L |
(C++17) |
__cpp_noexcept_function_type |
Спецификации исключений сделаны частью системы типов | 201510L |
(C++17) |
__cpp_nontype_template_args |
Разрешено константное вычисление для всех аргументов шаблона, не относящиеся к типу | 201411L |
(C++17) |
| Типы классов и типы с плавающей запятой в аргументах шаблона не являющихся типами | 201911L |
(C++20) | |
__cpp_nontype_template_parameter_auto |
Объявление аргументов шаблона не являющиеся типами с auto |
201606L |
(C++17) |
__cpp_nsdmi |
Инициализаторы нестатических элементов данных | 200809L |
(C++11) |
__cpp_range_based_for |
Основанный на диапазоне цикл for |
200907L |
(C++11) |
Цикл for на основе диапазона с разными начальным/конечным типами |
201603L |
(C++17) | |
__cpp_raw_strings |
Необработанные строковые литералы | 200710L |
(C++11) |
__cpp_ref_qualifiers |
Квалификаторы ссылок | 200710L |
(C++11) |
__cpp_return_type_deduction |
Вывод типа возвращаемого значения для обычных функций | 201304L |
(C++14) |
__cpp_rvalue_references |
Правосторонняя ссылка | 200610L |
(C++11) |
__cpp_size_t_suffix |
Литеральные суффиксы для size_t и её знаковой версии |
202011L |
(C++23) |
__cpp_sized_deallocation |
Освобождение памяти по размеру | 201309L |
(C++14) |
__cpp_static_assert |
static_assert | 200410L |
(C++11) |
Одно-аргументный static_assert |
201411L |
(C++17) | |
__cpp_structured_bindings |
Структурные привязки | 201606L |
(C++17) |
__cpp_template_template_args |
Соответствие шаблонным аргументам шаблона | 201611L |
(C++17) |
__cpp_threadsafe_static_init |
Динамическая инициализация и уничтожение с конкуренцией | 200806L |
(C++11) |
__cpp_unicode_characters |
Новые символьные типы (char16_t и char32_t) |
200704L |
(C++11) |
__cpp_unicode_literals |
Строковые литералы в Юникоде | 200710L |
(C++11) |
__cpp_user_defined_literals |
Пользовательские литералы | 200809L |
(C++11) |
__cpp_using_enum |
Using enum | 201907L |
(C++20) |
__cpp_variable_templates |
Шаблоны переменных | 201304L |
(C++14) |
__cpp_variadic_templates |
Вариативные шаблоны | 200704L |
(C++11) |
__cpp_variadic_using |
Расширения пакетов в using-объявлении |
201611L |
(C++17) |
Возможности библиотеки
Следующие макросы определены, если включён заголовок <version> или любой из соответствующих заголовков в таблице ниже. Каждый макрос расширяется в целочисленный литерал, соответствующий году и месяцу, когда соответствующая возможность была включена в рабочий черновик.
Когда возможность значительно изменяется, макрос обновляется соответствующим образом.
| Имя макроса | Возможность | Значение | Заголовок | Стд |
|---|---|---|---|---|
__cpp_lib_addressof_constexpr |
Constexpr std::addressof | 201603L |
<memory> | (C++17) |
__cpp_lib_allocator_traits_is_always_equal |
std::allocator_traits::is_always_equal | 201411L |
<memory> <scoped_allocator> <string> <deque> <forward_list> <list> <vector> <map> <set> <unordered_map> <unordered_set> | (C++17) |
__cpp_lib_any |
std::any | 201606L |
<any> | (C++17) |
__cpp_lib_apply |
std::apply | 201603L |
<tuple> | (C++17) |
__cpp_lib_array_constexpr |
Constexpr для std::reverse_iterator, std::move_iterator, std::array и доступа в диапазоне | 201603L |
<iterator> <array> | (C++17) |
| ConstexprIterator; constexpr сравнение для std::array; разные constexpr биты (std::array::fill и другие) | 201811L |
<iterator> <array> | (C++20) | |
__cpp_lib_as_const |
std::as_const | 201510L |
<utility> | (C++17) |
__cpp_lib_assume_aligned |
std::assume_aligned | 201811L |
<memory> | (C++20) |
__cpp_lib_atomic_flag_test |
std::atomic_flag::test | 201907L |
<atomic> | (C++20) |
__cpp_lib_atomic_float |
Атомарность с плавающей точкой | 201711L |
<atomic> | (C++20) |
__cpp_lib_atomic_is_always_lock_free |
constexpr atomic<T>::is_always_lock_free | 201603L |
<atomic> | (C++17) |
__cpp_lib_atomic_lock_free_type_aliases |
атомарные целочисленные типы без блокировок (std::atomic_signed_lock_free, std::atomic_unsigned_lock_free) | 201907L |
<atomic> | (C++20) |
__cpp_lib_atomic_ref |
std::atomic_ref | 201806L |
<atomic> | (C++20) |
__cpp_lib_atomic_shared_ptr |
std::atomic<std::shared_ptr> | 201711L |
<memory> | (C++20) |
__cpp_lib_atomic_value_initialization |
Исправление атомарной инициализации (инициализация значения std::atomic по умолчанию) | 201911L |
<atomic> <memory> | (C++20) |
__cpp_lib_atomic_wait |
Эффективное std::atomic ожидание | 201907L |
<atomic> | (C++20) |
__cpp_lib_barrier |
std::barrier | 201907L |
<barrier> | (C++20) |
__cpp_lib_bind_front |
std::bind_front | 201907L |
<functional> | (C++20) |
__cpp_lib_bit_cast |
std::bit_cast | 201806L |
<bit> | (C++20) |
__cpp_lib_bitops |
Битовые операции | 201907L |
<bit> | (C++20) |
__cpp_lib_bool_constant |
std::bool_constant | 201505L |
<type_traits> | (C++17) |
__cpp_lib_bounded_array_traits |
std::is_bounded_array, std::is_unbounded_array | 201902L |
<type_traits> | (C++20) |
__cpp_lib_boyer_moore_searcher |
std::boyer_moore_searcher | 201603L |
<functional> | (C++17) |
__cpp_lib_byte |
std::byte | 201603L |
<cstddef> | (C++17) |
__cpp_lib_char8_t |
Библиотечная поддержка для char8_t | 201907L |
<atomic> <filesystem> <istream> <limits> <locale> <ostream> <string> <string_view> | (C++20) |
__cpp_lib_chrono |
Функции округления для std::chrono::duration и std::chrono::time_point | 201510L |
<chrono> | (C++17) |
| Constexpr для всех функций-элементов std::chrono::duration и std::chrono::time_point | 201611L |
<chrono> | (C++17) | |
| Календари и Часовые Пояса | 201907L |
<chrono> | (C++20) | |
__cpp_lib_chrono_udls |
Определяемые пользователем литералы для типов времени | 201304L |
<chrono> | (C++14) |
__cpp_lib_clamp |
std::clamp | 201603L |
<algorithm> | (C++17) |
__cpp_lib_complex_udls |
Пользовательские литералы для std::complex |
201309L |
<complex> | (C++14) |
__cpp_lib_concepts |
Концепты стандартной библиотеки | 202002L |
<concepts> | (C++20) |
__cpp_lib_constexpr_algorithms |
Constexpr для алгоритмов | 201806L |
<algorithm> | (C++20) |
__cpp_lib_constexpr_complex |
Constexpr для std::complex | 201711L |
<complex> | (C++20) |
__cpp_lib_constexpr_dynamic_alloc |
Constexpr для std::allocator и связанных утилит | 201907L |
<memory> | (C++20) |
__cpp_lib_constexpr_functional |
Разные constexpr биты (std::default_searcher); constexpr INVOKE | 201907L |
<functional> | (C++20) |
__cpp_lib_constexpr_iterator |
Разные constexpr биты (std::insert_iterator и другие) | 201811L |
<iterator> | (C++20) |
__cpp_lib_constexpr_memory |
Constexpr в std::pointer_traits | 201811L |
<memory> | (C++20) |
__cpp_lib_constexpr_numeric |
Constexpr для числовых алгоритмов | 201911L |
<numeric> | (C++20) |
__cpp_lib_constexpr_string |
Constexpr для std::string | 201907L |
<string> | (C++20) |
__cpp_lib_constexpr_string_view |
Разные constexpr биты (std::string_view::copy) | 201811L |
<string_view> | (C++20) |
__cpp_lib_constexpr_tuple |
Разные constexpr биты (std::tuple::operator= и другие) | 201811L |
<tuple> | (C++20) |
__cpp_lib_constexpr_typeinfo |
Constexpr для std::type_info::operator== | 202106L |
<typeinfo> | (C++23) |
__cpp_lib_constexpr_utility |
Разные constexpr биты (std::pair::operator= и другие) | 201811L |
<utility> | (C++20) |
__cpp_lib_constexpr_vector |
Constexpr для std::vector | 201907L |
<vector> | (C++20) |
__cpp_lib_coroutine |
Сопрограммы (поддержка библиотекой) | 201902L |
<coroutine> | (C++20) |
__cpp_lib_destroying_delete |
Уничтожение operator delete (поддержка библиотекой) |
201806L |
<new> | (C++20) |
__cpp_lib_enable_shared_from_this |
Более точная спецификация std::enable_shared_from_this | 201603L |
<memory> | (C++17) |
__cpp_lib_endian |
std::endian | 201907L |
<bit> | (C++20) |
__cpp_lib_erase_if |
Равномерная очистка контейнера | 202002L |
<string> <deque> <forward_list> <list> <vector> <map> <set> <unordered_map> <unordered_set> | (C++20) |
__cpp_lib_exchange_function |
std::exchange | 201304L |
<utility> | (C++14) |
__cpp_lib_execution |
Политики исполнения | 201603L |
<execution> | (C++17) |
| std::execution::unsequenced_policy | 201902L |
<execution> | (C++20) | |
__cpp_lib_filesystem |
Библиотека файловой системы | 201703L |
<filesystem> | (C++17) |
__cpp_lib_format |
Форматирование текста | 201907L |
<format> | (C++20) |
__cpp_lib_gcd_lcm |
std::gcd, std::lcm | 201606L |
<numeric> | (C++17) |
__cpp_lib_generic_associative_lookup |
Поиск гетерогенным сравнением в [[cpp/container#Ассоциативные контейнеры|ассоциативных контейнерах | 201304L |
<map> <set> | (C++14) |
__cpp_lib_generic_unordered_lookup |
Поиск гетерогенным сравнением в ассоциативных контейнерах | 201811L |
<unordered_map> <unordered_set> | (C++20) |
__cpp_lib_hardware_interference_size |
[[constexpr std::hardware_{constructive, destructive}_interference_size|hardware_destructive_interference_size|constexpr std::hardware_{constructive, destructive}_interference_size]]]] | 201703L |
<new> | (C++17) |
__cpp_lib_has_unique_object_representations |
std::has_unique_object_representations | 201606L |
<type_traits> | (C++17) |
__cpp_lib_hypot |
3-аргументная перегрузка std::hypot | 201603L |
<cmath> | (C++17) |
__cpp_lib_incomplete_container_elements |
Минимальная поддержка неполных типов для стандартных контейнеров | 201505L |
<forward_list> <list> <vector> | (C++17) |
__cpp_lib_int_pow2 |
Интегральные операции степени двойки (std::has_single_bit, std::bit_ceil, std::bit_floor, std::bit_length) | 202002L |
<bit> | (C++20) |
__cpp_lib_integer_comparison_functions |
Целочисленные функции сравнения | 202002L |
<utility> | (C++20) |
__cpp_lib_integer_sequence |
Целочисленные последовательности времени компиляции | 201304L |
<utility> | (C++14) |
__cpp_lib_integral_constant_callable |
std::integral_constant | 201304L |
<type_traits> | (C++14) |
__cpp_lib_interpolate |
std::lerp, std::midpoint | 201902L |
<cmath> <numeric> | (C++20) |
__cpp_lib_invoke |
std::invoke | 201411L |
<functional> | (C++17) |
__cpp_lib_invoke_r |
std::invoke_r | 202106L |
<functional> | (C++23) |
__cpp_lib_is_aggregate |
std::is_aggregate | 201703L |
<type_traits> | (C++17) |
__cpp_lib_is_constant_evaluated |
std::is_constant_evaluated | 201811L |
<type_traits> | (C++20) |
__cpp_lib_is_final |
std::is_final | 201402L |
<type_traits> | (C++14) |
__cpp_lib_is_invocable |
std::is_invocable, std::invoke_result | 201703L |
<type_traits> | (C++17) |
__cpp_lib_is_layout_compatible |
std::is_layout_compatible | 201907L |
<type_traits> | (C++20) |
__cpp_lib_is_nothrow_convertible |
std::is_nothrow_convertible | 201806L |
<type_traits> | (C++20) |
__cpp_lib_is_null_pointer |
std::is_null_pointer | 201309L |
<type_traits> | (C++14) |
__cpp_lib_is_pointer_interconvertible |
Свойства указателя-взаимоконвертируемости | 201907L |
<type_traits> | (C++20) |
__cpp_lib_is_scoped_enum |
std::is_scoped_enum | 202011L |
<type_traits> | (C++23) |
__cpp_lib_is_swappable |
[nothrow-]замена свойств |
201603L |
<type_traits> | (C++17) |
__cpp_lib_jthread |
Стоповый токен и присоединяющаяся ветвь | 201911L |
<stop_token> <thread> | (C++20) |
__cpp_lib_latch |
std::latch | 201907L |
<latch> | (C++20) |
__cpp_lib_launder |
Основной Выпуск 1776: Обмен объектов класса, содержащих ссылочные элементы (std::launder) | 201606L |
<new> | (C++17) |
__cpp_lib_list_remove_return_type |
Изменение типа возврата std::list::remove, std::list::remove_if и std::list::unique элементов объектов std::forward_list и std::list | 201806L |
<forward_list> <list> | (C++20) |
__cpp_lib_logical_traits |
Свойства типа логического оператора | 201510L |
<type_traits> | (C++17) |
__cpp_lib_make_from_tuple |
std::make_from_tuple() | 201606L |
<tuple> | (C++17) |
__cpp_lib_make_reverse_iterator |
std::make_reverse_iterator | 201402L |
<iterator> | (C++14) |
__cpp_lib_make_unique |
std::make_unique | 201304L |
<memory> | (C++14) |
__cpp_lib_map_try_emplace |
std::map::try_emplace, std::map::insert_or_assign | 201411L |
<map> | (C++17) |
__cpp_lib_math_constants |
Математические константы | 201907L |
<numbers> | (C++20) |
__cpp_lib_math_special_functions |
Специальные математические функции для C++17 | 201603L |
<cmath> | (C++17) |
__cpp_lib_memory_resource |
std::pmr::memory_resource | 201603L |
<memory_resource> | (C++17) |
__cpp_lib_node_extract |
Объединение карт и наборов (std::map::extract, std::map::merge, std::map::insert(node_type) и т.д.) | 201606L |
<map> <set> <unordered_map> <unordered_set> | (C++17) |
__cpp_lib_nonmember_container_access |
std::size(), std::data() и std::empty() | 201411L |
<iterator> <array> <deque> <forward_list> <list> <map> <regex> <set> <string> <unordered_map> <unordered_set> <vector> | (C++17) |
__cpp_lib_not_fn |
std::not_fn() | 201603L |
<functional> | (C++17) |
__cpp_lib_null_iterators |
Null LegacyForwardIterators | 201304L |
<iterator> | (C++14) |
__cpp_lib_optional |
std::optional | 201606L |
<optional> | (C++17) |
__cpp_lib_parallel_algorithm |
Параллельные алгоритмы | 201603L |
<algorithm> <numeric> | (C++17) |
__cpp_lib_polymorphic_allocator |
std::polymorphic_allocator как тип словаря | 201902L |
<memory_resource> | (C++20) |
__cpp_lib_quoted_string_io |
std::quoted | 201304L |
<iomanip> | (C++14) |
__cpp_lib_ranges |
Библиотека диапазонов и ограниченные алгоритмы | 201911L |
<algorithm> <functional> <iterator> <memory> <ranges> | (C++20) |
__cpp_lib_raw_memory_algorithms |
Расширение инструментов управления памятью | 201606L |
<memory> | (C++17) |
__cpp_lib_remove_cvref |
std::remove_cvref | 201711L |
<type_traits> | (C++20) |
__cpp_lib_result_of_sfinae |
std::result_of и SFINAE | 201210L |
<type_traits> <functional> | (C++14) |
__cpp_lib_robust_nonmodifying_seq_ops |
Повышение устойчивости последовательности немодифицирующих операций (двухдиапазонные перегрузки для std::mismatch, std::equal и std::is_permutation) | 201304L |
<algorithm> | (C++14) |
__cpp_lib_sample |
std::sample | 201603L |
<algorithm> | (C++17) |
__cpp_lib_scoped_lock |
std::scoped_lock | 201703L |
<mutex> | (C++17) |
__cpp_lib_semaphore |
std::counting_semaphore, std::binary_semaphore |
201907L |
<semaphore> | (C++20) |
__cpp_lib_shared_mutex |
std::shared_mutex (безвременной) | 201505L |
<shared_mutex> | (C++17) |
__cpp_lib_shared_ptr_arrays |
std::shared_ptr | 201611L |
<memory> | (C++17) |
| Поддержка массива std::make_shared | 201707L |
<memory> | (C++20) | |
__cpp_lib_shared_ptr_weak_type |
shared_ptr::weak_type | 201606L |
<memory> | (C++17) |
__cpp_lib_shared_timed_mutex |
std::shared_timed_mutex | 201402L |
<shared_mutex> | (C++14) |
__cpp_lib_shift |
std::shift_left и std::shift_right | 201806L |
<algorithm> | (C++20) |
__cpp_lib_smart_ptr_for_overwrite |
Создание умного указателя с инициализацией по умолчанию (std::allocate_shared_for_overwrite, std::make_shared_for_overwrite, std::make_unique_for_overwrite) | 202002L |
<memory> | (C++20) |
__cpp_lib_source_location |
Сбор информации об исходном коде (std::source_location) | 201907L |
<source_location> | (C++20) |
__cpp_lib_span |
std::span | 202002L |
<span> | (C++20) |
__cpp_lib_ssize |
std::ssize и беззнаковый std::span::size | 201902L |
<iterator> | (C++20) |
__cpp_lib_stacktrace |
Библиотека Stacktrace | 202011L |
<stacktrace> | (C++23) |
__cpp_lib_starts_ends_with |
Проверка префикса и суффикса строки (std::string_view::starts_with и std::string_view::ends_with для std::string и std::string_view) | 201711L |
<string> <string_view> | (C++20) |
__cpp_lib_stdatomic_h |
Заголовок совместимости для атомарных операций C | 202011L |
<stdatomic.h> | (C++23) |
__cpp_lib_string_contains |
Функции contains объектов std::basic_string и std::basic_string_view |
202011L |
<string> |