Espacios de nombres
Variantes

Prueba de características (C++20)

De cppreference.com
< cpp

El estándar define un conjunto de macros de preprocesador correspondiente al lenguaje C++ y las características de la biblioteca introducidas en C++11 o posterior. Pretenden ser una forma simple y portátil de detectar la presencia de dichas características.

Atributos

__has_cpp_attribute( token-de-atributo )

Verifica la presencia de un atributo denominado por token-de-atributo (después de la expansión de macro).

Para los atributos estándar, se expandirá al año y mes en que el atributo se agregó al borrador de trabajo (consulta la tabla a continuación), la presencia de atributos específicos del proveedor se determina por un valor distinto de cero.

__has_cpp_attribute se puede expandir en la expresión de #if y #elif. Se trata como una macro definida por #ifdef, #ifndef y defined, pero no se puede usar en ninguna otra parte.

token-de-atributo Atributo Valor Estándar
carries_dependency [[carries_dependency]] 200809L (C++11)
deprecated [[deprecated]] 201309L (C++14)
fallthrough [[fallthrough]] 201603L (C++17)
likely [[likely]] 201803L (C++20)
maybe_unused [[maybe_unused]] 201603L (C++17)
no_unique_address [[no_unique_address]] 201803L (C++20)
nodiscard [[nodiscard]] 201603L (C++17)
201907L (C++20)
noreturn [[noreturn]] 200809L (C++11)
unlikely [[unlikely]] 201803L (C++20)

Características del lenguaje

Las siguientes macros están predefinidas en cada unidad de traducción. Cada macro se expande a un literal entero correspondiente al año y mes cuando la característica correspondiente se incluyó en el borrador de trabajo.

Cuando una característica cambia significativamente, la macro se actualizará en consecuencia.

Nombre de la macro Característica Valor Estándar
__cpp_aggregate_bases Clases de agregado con clases base 201603L (C++17)
__cpp_aggregate_nsdmi Clases de agregado con inicializadores de miembros por defecto 201304L (C++14)
__cpp_aggregate_paren_init Inicialización de agregados en la forma de inicialización directa 201902L (C++20)
__cpp_alias_templates Plantillas de alias 200704L (C++11)