`
#elif ` ](/w/cpp/preprocessor/conditional "cpp/preprocessor/conditional") . It
is treated as a defined macro by [ ` #ifdef `
](/w/cpp/preprocessor/conditional "cpp/preprocessor/conditional") , [ `
#ifndef ` ](/w/cpp/preprocessor/conditional "cpp/preprocessor/conditional") ,
[ ` #elifdef ` ](/w/cpp/preprocessor/conditional
"cpp/preprocessor/conditional") , [ ` #elifndef `
](/w/cpp/preprocessor/conditional "cpp/preprocessor/conditional") (since
C++23)  and [ ` defined ` ](/w/cpp/preprocessor/conditional
"cpp/preprocessor/conditional") but cannot be used anywhere else.

attribute-token  |  Attribute  |  Value  |  Standard  |  Paper(s)   
---|---|---|---|---  
` assume ` |  ` [[ [ assume ](/w/cpp/language/attributes/assume "cpp/language/attributes/assume") ]] ` |  202207L  |  (C++23)  |  [ P1774R8 ](https://wg21.link/P1774R8)  
` carries_dependency ` |  ` [[ [ carries_dependency ](/w/cpp/language/attributes/carries_dependency "cpp/language/attributes/carries dependency") ]] ` |  200809L  |  (C++11)  |  [ N2556 ](https://wg21.link/N2556) , [ N2643 ](https://wg21.link/N2643)  
` deprecated ` |  ` [[ [ deprecated ](/w/cpp/language/attributes/deprecated "cpp/language/attributes/deprecated") ]] ` |  201309L  |  (C++14)  |  [ N3760 ](https://wg21.link/N3760)  
` fallthrough ` |  ` [[ [ fallthrough ](/w/cpp/language/attributes/fallthrough "cpp/language/attributes/fallthrough") ]] ` |  201603L  |  (C++17)  |  [ P0188R1 ](https://wg21.link/P0188R1)  
` likely ` |  ` [[ [ likely ](/w/cpp/language/attributes/likely "cpp/language/attributes/likely") ]] ` |  201803L  |  (C++20)  |  [ P0479R5 ](https://wg21.link/P0479R5)  
` maybe_unused ` |  ` [[ [ maybe_unused ](/w/cpp/language/attributes/maybe_unused "cpp/language/attributes/maybe unused") ]] ` |  201603L  |  (C++17)  |  [ P0212R1 ](https://wg21.link/P0212R1)  
` no_unique_address ` |  ` [[ [ no_unique_address ](/w/cpp/language/attributes/no_unique_address "cpp/language/attributes/no unique address") ]] ` |  201803L  |  (C++20)  |  [ P0840R2 ](https://wg21.link/P0840R2)  
` nodiscard ` |  ` [[ [ nodiscard ](/w/cpp/language/attributes/nodiscard "cpp/language/attributes/nodiscard") ]] ` |  201603L  |  (C++17)  |  [ P0189R1 ](https://wg21.link/P0189R1)  
201907L  |  (C++20)  |  [ P1301R4 ](https://wg21.link/P1301R4)  
` noreturn ` |  ` [[ [ noreturn ](/w/cpp/language/attributes/noreturn "cpp/language/attributes/noreturn") ]] ` |  200809L  |  (C++11)  |  [ N2761 ](https://wg21.link/N2761)  
` unlikely ` |  ` [[ [ unlikely ](/w/cpp/language/attributes/likely "cpp/language/attributes/likely") ]] ` |  201803L  |  (C++20)  |  [ P0479R5 ](https://wg21.link/P0479R5)  
Total number of attributes: 10  
  
###  [ [ edit ](/mwiki/index.php?title=cpp/feature_test&action=edit&section=2
"Edit section: Language features") ]  Language features

The following macros are predefined in every translation unit. Each macro
expands to an integer literal corresponding to the year and month when the
corresponding feature has been included in the working draft.

When a feature changes significantly, the macro will be updated accordingly.

[ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/utility/lang_feature_macros&action=edit)

Macro name  |  Feature  |  Value  |  Std  |  Paper(s)   
---|---|---|---|---  
` __cpp_aggregate_bases ` |  [ Aggregate classes ](/w/cpp/language/aggregate_initialization "cpp/language/aggregate initialization") with base classes  |  201603L  |  (C++17)  |  [ P0017R1 ](https://wg21.link/P0017R1)  
` __cpp_aggregate_nsdmi ` |  [ Aggregate classes ](/w/cpp/language/aggregate_initialization "cpp/language/aggregate initialization") with [ default member initializers ](/w/cpp/language/data_members#Member_initialization "cpp/language/data members") |  201304L  |  (C++14)  |  [ N3653 ](https://wg21.link/N3653)  
` __cpp_aggregate_paren_init ` |  [ Aggregate initialization ](/w/cpp/language/aggregate_initialization "cpp/language/aggregate initialization") in the form of [ dire