C++20 Features Supported by Intel® C++ Compiler

ID 764075
Updated 11/17/2023
Version Latest
Public

author-image

By

C++ 20 Features

Following is the status and version of compiler support for C++ 20 Features:

Language FeatureStandard #ICC 2021.6ICC 2021.7 (oneAPI 2022.3)ICX 2023.2 (oneAPI 2023.2)ICX 2024.0 (oneAPI 2024.0)ICX 2024.1 (oneAPI 2024.1)
Default member initializers for bit-fieldsP0683R1YesYesYesYesYes
Fixing const qualified-pointers-to-membersP0704R1YesYesYesYesYes
Allow lambda capture [=, this]P0409R2YesYesYesYesYes
__VA_OPT__ : for preprocessor comma elisionP1042R1YesYesYesYesYes
__VA_OPT__: Comma omission and comma deletionP0306R4YesYesYesYesYes
Designated initializersP0329R4YesYesYesYesYes
Familiar template syntax for generic lambdasP0428R2YesYesYesYesYes
Constructor Template Argument DeductionP0702R1YesYesYesYesYes
Concepts: C++ Extensions for ConceptsP0734R0YesNoYesYesYes
Concepts: Wording for “functionality gaps in constraints”P0857R0NoNoYesYesYes
Concepts: Today's return-type-requirements Are InsufficientP1084R2NoNoYesYesYes
Concepts: On the non-uniform semantics of return-type-requirementsP1452R2NoNoYesYesYes
Concepts: Using unconstrained template parameters with constrained templatesP1616R1NoNoYesYesYes
Concepts: Declaration matching for non-dependent requires-clausesP1980R0NoNoNoNoNo
Concepts: Yet another approach for constrained declarationsP1141R2NoNoYesYesYes
Concepts: US105 Check satisfaction of constraints for non-templates when forming pointer to functionP1972R0NoNoNoNoNo
Concepts: Disallow changing concept valuesP2104R0NoNoNoNoNo
Concepts: Disambiguating Nested-RequirementsP2092R0NoNoYesYesYes
Concepts: Partial ordering of rewritten operator candidates resulting from constrained templatesP2113R0NoNoYesYesYes
Concepts: Parameter mapping for non-dependent entities (CA107) & Comparing types and type-constraints (US117)P2103R0NoNoNoNoNo
Concepts: CA 104 Clarify declaration matching and partial ordering requiring substitution into constraintsP2103R0NoNoNoNoNo
Concepts: US115 Hidden non-template friends need a requires-clauseP2103R0NoNoNoNoNo
Range-based for statements with initializerP0614R1NoYesYesYesYes
Simplifying implicit lambda captureP0588R1YesYesYesYesYes
ADL and Function Templates that are not visibleP0846R0YesYesYesYesYes
const mismatch with defaulted copy constructor (core issue 1331)P0641R2YesYesYesYesYes
When are constexpr member functions defined? (core issue 1581)P0859R0NoNoNoNoNo
Access Checking on SpecializationsP0692R1YesYesYesYesYes
Default constructible and assignable stateless lambdasP0624R2YesYesYesYesYes
Spaceship: Three-way comparison operatorP0515R3YesYesYesYesYes
Spaceship: Symmetry for spaceshipP0905R1YesYesYesYesYes
Spaceship: <=> != ==P1185R2YesYesYesYesYes
Spaceship: Spaceship needs a tune-upP1630R1YesYesYesYesYes
Spaceship: Consistency improvements for comparisonsP1120R0NoNoYesYesYes
Spaceship: When do you actually use <=>?P1186R3YesYesYesYesYes
Spaceship: Remove std::weak_equality and std::strong_equalityP1959R0NoYesYesYesYes
Spaceship: Consistent defaulted comparisonsP2085R0NoYesYesYesYes
Spaceship: Defaulted comparison specification cleanupsP2002R1NoYesPartialYesYes
Wording for lambdas in unevaluated contextsP0315R4NoNoPartialYesYes
Deprecate PODP0767R1YesYesYesYesYes
Language support for empty objectsP0840R2YesYesYesYesYes
Relaxing the range-for loop customization point finding rulesP0962R1YesYesYesYesYes
Allow structured bindings to accessible membersP0969R0YesYesYesYesYes
Relaxing structured bindings customization pointP0961R1YesYesYesYesYes
Make "typename" more optionalP0634R3NoNoYesYesYes
Lambda init-capture: Allow pack expansion in lambda init-captureP0780R2NoYesYesYesYes
Lambda init-capture: Resolve lambda init-capture pack grammar (CWG2378)P2095R0NoYesNoNoNo
[[likely]] and [[unlikely]] attributesP0479R5NoYesYesYesYes
Deprecate implicit capture of this via [=]P0806R2NoNoNoNoNo
Non-Type Template Parameters: Class Types in Non-Type Template ParametersP0732R2NoNoPartialPartialPartial
Non-Type Template Parameters: Inconsistencies with non-type template parametersP1907R1NoNoPartialPartialPartial
Atomic Padding BitsP0528R3N/AN/ANoNoNo
Efficient sized delete for variable sized classesP0722R3NoNoYesYesYes
Allowing Virtual Function Calls in Constant ExpressionsP1064R0YesYesYesYesYes
Prohibit aggregates with user-declared constructorsP1008R1YesYesYesYesYes
Integrating feature-test macros into the C++ WDP0941R2YesYessee docsee docsee doc
explicit(bool)P0892R2YesYesYesYesYes
Checking for abstract class typesP0929R2NoNoNoNoNo
Coroutines: US065: Apply Coroutines TS issue 24 from P0664R8P0664R8NoNoNoNoNo
Coroutines: Merge Coroutines TS into C++20 working draftP0912R5YesYesPartialPartialPartial
char8_t: A type for UTF-8 characters and stringsP0482R6YesYesYesYesYes
try-catch blocks in constexpr functionsP1002R1NoNoYesYesYes
Allowing dynamic_cast and polymorphic typeid in constant expressionsP1327R1YesYesYesYesYes
Immediate functionsP1073R3YesYesYesYesYes
std::is_constant_evaluated()P0595R2YesYesYesYesYes
Nested inline namespacesP1094R2YesYesYesYesYes
Changing an active union member in constant expressionsP1330R0YesYesYesYesYes
Missing Feature Test MacrosP1353R0YesYesYesYesYes
Alternative Wording for P0907R4 Signed Integers are Two's ComplementP1236R1N/AN/AYesYesYes
Variable like Declaration of structured bindingsP1091R3N/AN/AYesYesYes
Reference capture of structured bindingsP1381R1YesYesYesYesYes
Extending structured bindings to be more like variable declarationsP1091R3YesYesPartialPartialPartial
Make char16_t/char32_t string literals be UTF-16/32P1041R4N/AN/AYesYesYes
Allow initializing aggregates from a parenthesized list of valuesP0960R3YesYesYesYesYes
Fixing the wording of parenthesized aggregate-initializationP1975R0NoNoYesYesYes
Array size deduction in new-expressionsP1009R2YesYesYesYesYes
Modules: Merging ModulesP1103R3NoNoPartialPartialPartial
Modules: Dynamic Initialization Order of Non-Local Variables in ModulesP1874R1NoNoPartialPartialPartial
Modules: Resolution to US086P1979R0NoNoNoNoNo
Modules: Mitigating minor modules maladiesP1766R1NoNoYesYesYes
Modules: Relaxing redefinition restrictions for re-exportation robustnessP1811R0NoNoNoNoNo
Modules: Recognizing Header Unit Imports Requires Full PreprocessingP1703R1NoNoNoNoNo
Modules: Modules Dependency DiscoveryP1857R3NoNoNoNoNo
Modules: Disallow "export import foo" outside of module interfaceP2109R0NoNoNoNoNo
Modules: ABI isolation for member functions (in-class member function definitions not implicitly inline in named modules)P1779R3NoNoNoNoNo
Modules: Merging of multiple definitions for unnamed unscoped enumerationsP2115R0NoNoPartialPartialPartial
Modules: Translation-unit-local entitiesP1815R2NoNoNoNoNo
Core Issue 1778: exception-specification in explicitly-defaulted functionsP1286R2YesYesYesYesYes
Deprecate uses of the comma operator in subscripting expressionsP1161R3NoYesYesYesYes
Permitting trivial default initialization in constexpr contextsP1331R2NoYesYesYesYes
Interaction of memory_order_consume with release sequencesP0735R1N/AN/A   
Conditionally Trivial Special Member FunctionsP0848R3NoYesPartialPartialPartial
[[nodiscard("should have a reason")]]P1301R4YesYesYesYesYes
Using EnumP1099R5NoNoYesYesYes
CTAD: Wording for class template argument deduction for aggregatesP1816R0NoNoNoYesYes
CTAD: Fixing CTAD for aggregatesP2082R1NoNoNoNoYes
Enabling constexpr intrinsics by permitting unevaluated inline-assembly in constexpr functionsP1668R1NoYesYesYesYes
Permit conversions to arrays of unknown boundP0388R4YesYesYesYesYes
Adding the constinit keywordP1143R2NoYesYesYesYes
Deprecating volatileP1152R4YesYesYesYesYes
[[nodiscard]] for constructorsP1771R1YesYesYesYesYes
Wording for Class Template Argument Deduction for Alias TemplatesP1814R0NoNoNoNoNo
Implicit move for more local objects and rvalue referencesP1825R0YesYesYesYesYes
More constexpr containersP0784R7YesYesYesYesYes
Allow defaulting comparisons by valueP1946R0NoYesYesYesYes
Fixing inconsistencies between constexpr and consteval functionsP1937R2NoNoYesYesYes
Reserving Attribute Namespaces for Future UseP1908R1N/AN/A   
Implicit creation of objects for low-level object manipulationP0593R6N/AN/AYesYesYes

Use compiler option -std=c++20 (/Qstd=c++20) to enable C++20 features.
ICX is compiler based out of clang. Please see here for more detailed list.

Other relevant articles:

  1. Intel Compiler C++11 support status
  2. Intel Compiler C++14 support status
  3. Intel Compiler C++17 support status
  4. Intel Compiler C++23 support status

1