Пространства имён
Варианты
Действия

Макросы проверки возможностей (начиная с C++20)

Материал из cppreference.com
< cpp

Стандарт определяет набор макросов препроцессора, соответствующих языку 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