Modern C++ Language Features Compliance Status
Go Up to Modern C++
Below are the lists of Modern C++ features that are supported by the RAD Studio C++ compilers.
C++17 Features
| Feature | C++17 Proposal Document | BCC32C/X | BCC64 |
|---|---|---|---|
| New auto rules for direct-list-initialization | N3922 | ||
| static_assert with no message | N3928 | ||
| typename in a template template parameter | N4051 | ||
| Removing trigraphs | N4086 | ||
| Nested namespace definition | N4230 | ||
| Attributes for namespaces and enumerators | N4266 | ||
| u8 character literals | N4267 | ||
| Allow constant evaluation for all non-type template arguments | N4268 | ||
| Fold Expressions | N4295 | ||
| Remove Deprecated Use of the register Keyword | P0001R1 | ||
| Remove Deprecated operator++(bool) | P0002R1 | ||
| Removing Deprecated Exception Specifications from C++17 | P0003R5 | ||
| Make exception specifications part of the type system | P0012R1 | ||
| Aggregate initialization of classes with base classes | P0017R1 | ||
| Lambda capture of *this | P0018R3 | ||
| Using attribute namespaces without repetition | P0028R4 | ||
| Dynamic memory allocation for over-aligned data | P0035R4 | ||
| Unary fold expressions and empty parameter packs | P0036R0 | ||
| __has_include in preprocessor conditionals | P0061R1 | ||
| Template argument deduction for class templates | P0091R3 | ||
| Non-type template parameters with auto type | P0127R2 | ||
| Guaranteed copy elision | P0135R1 | ||
| New specification for inheriting constructors (DR1941 et al) | P0136R1 | ||
| Replacement of class objects containing reference members | P0137R1 | ||
| Direct-list-initialization of enumerations | P0138R2 | ||
| Stricter expression evaluation order | P0145R3 | ||
| constexpr lambda expressions | P0170R1 | ||
| Differing begin and end types in range-based for | P0184R0 | ||
| [[fallthrough]] attribute | P0188R1 | ||
| [[nodiscard]] attribute | P0189R1 | ||
| Pack expansions in using-declarations | P0195R2 | ||
| [[maybe_unused]] attribute | P0212R1 | ||
| Structured Bindings | P0217R3 | ||
| Hexadecimal floating-point literals | P0245R1 | ||
| Ignore unknown attributes | P0283R2 | ||
| constexpr if statements | P0292R2 | ||
| init-statements for if and switch | P0305R1 | ||
| Inline variables | P0386R2 | ||
| DR: Matching of template template-arguments excludes compatible templates | P0522R0 | ||
| std::uncaught_exceptions() | N4259 | ||
| Improving std::pair and std::tuple | N4387 | ||
| std::any | P0220R1 | ||
| std::variant | P0088R3 | ||
| std::optional | P0220R1 | ||
| std::shared_mutex (untimed) | N4508 | ||
| std::string_view | N3921 | ||
| Standardization of Parallelism TS | P0024R2 | ||
| Elementary string conversions | P0067R5 | ||
| Mathematical special functions | P0226R1 | ||
| Splicing Maps and Sets | P0083R3 | ||
| Hardware interference size | P0154R1 | ||
| std::filesystem | P0218R1 | ||
| std::byte | P0298R3 |
C++14 Features
| Feature | C++14 Proposal Document | BCC32C/X | BCC64 |
|---|---|---|---|
| Tweaked wording for contextual conversions | N3323 | ||
| Binary literals | N3472 | ||
| decltype(auto), Return type deduction for normal functions | N3638 | ||
| Initialized/Generalized lambda captures (init-capture) | N3648 | ||
| Generic (polymorphic) lambda expressions | N3649 | ||
| Variable templates | N3651 | ||
| Extended constexpr | N3652 | ||
| Member initializers and aggregates (NSDMI) | N3653 | ||
| Clarifying memory allocation (avoiding/fusing allocations) | N3664 | ||
| [[deprecated]] attribute | N3760 | ||
| Sized deallocation | N3768 | ||
| Single quote as digit separator | N3781 | ||
| std::result_of and SFINAE | N3462 | ||
| constexpr for <complex> | N3302 | ||
| constexpr for <chrono> | N3469 | ||
| constexpr for <array> | N3470 | ||
| constexpr for <initializer_list>, <utility> and <tuple> | N3471 | ||
| Improved std::integral_constant | N3545 | ||
| User-defined literals for <chrono> and <string> | N3642 | ||
| Null forward iterators | N3644 | ||
| std::quoted | N3654 | ||
| Heterogeneous associative lookup | N3657 | ||
| std::integer_sequence | N3658 | ||
| std::shared_timed_mutex | N3659 | ||
| std::exchange | N3668 | ||
| fixing constexpr member functions without const | N3669 | ||
| std::get<T>() | N3670 | ||
| Dual-Range std::equal, std::is_permutation, std::mismatch | N3671 |
C++11 Features
| Feature | C++11 Proposal Document |
BCC32C/X | BCC32 | BCC64 | BCCOSX | BCCIOSARM | BCCIOSARM64 | BCCAARM |
|---|---|---|---|---|---|---|---|---|
| Rvalue references | N2118 | |||||||
Rvalue references for *this
|
N2439 | |||||||
| Initialization of class objects by rvalues | N1610 | |||||||
| Non-static data member initializers | N2756 | |||||||
| Variadic templates | N2242 | |||||||
| Extending variadic template template parameters | N2555 | |||||||
| Initializer lists | N2672 | |||||||
| Static assertions | N1720 | |||||||
auto-typed variables
|
N1984 | |||||||
Multi-declarator auto
|
N1737 | |||||||
| Removal of auto as a storage-class specifier | N2546 | |||||||
| New function declarator syntax | N2541 | |||||||
| Lambda expressions | N2927 | |||||||
| Declared type of an expression | N2343 | |||||||
| Incomplete return types | N3276 | |||||||
| Right angle brackets | N1757 | |||||||
| Default template arguments for function templates | DR226 | |||||||
| Solving the SFINAE problem for expressions | DR339 | |||||||
| Alias templates | N2258 | |||||||
| Extern templates | N1987 | |||||||
| Null pointer constant | N2431 | |||||||
| Strongly-typed enums | N2347 | |||||||
| Forward declarations for enums | N2764 DR1206 |
|||||||
| Standardized attribute syntax | N2761 | |||||||
| Generalized constant expressions | N2235 | |||||||
| Alignment support | N2341 | |||||||
| Conditionally-support behavior | N1627 | |||||||
| Changing undefined behavior into diagnosable errors | N1727 | |||||||
| Delegating constructors | N1986 | |||||||
| Inheriting constructors | N2540 | |||||||
| Explicit conversion operators | N2437 | |||||||
| New character types | N2249 | |||||||
| Unicode string literals | N2442 | |||||||
| Raw string literals | N2442 | |||||||
| Universal character names in literals | N2170 | |||||||
| User-defined literals | N2765 | |||||||
| Standard Layout Types | N2342 | |||||||
| Defaulted functions | N2346 | |||||||
| Deleted functions | N2346 | |||||||
| Extended friend declarations | N1791 | |||||||
Extending sizeof
|
N2253 DR850 |
|||||||
| Inline namespaces | N2535 | |||||||
| Unrestricted unions | N2544 | |||||||
| Local and unnamed types as template arguments | N2657 | |||||||
| Range-based for | N2930 | |||||||
| Explicit virtual overrides | N2928 N3206 N3272 |
|||||||
| Minimal support for garbage collection and reachability-based leak detection | N2670 | |||||||
| Allowing move constructors to throw [noexcept] | N3050 | |||||||
| Defining move special member functions | N3053 | |||||||
| Concurrency | ||||||||
| Sequence points | N2239 | |||||||
| Atomic operations | N2427 | |||||||
| Strong Compare and Exchange | N2748 | |||||||
| Bidirectional Fences | N2752 | |||||||
| Memory model | N2429 | |||||||
| Data-dependency ordering: atomics and memory model | N2664 | |||||||
| Propagating exceptions | N2179 | |||||||
| Allow atomics use in signal handlers | N2547 | |||||||
| Thread-local storage | N2659 | |||||||
| Dynamic initialization and destruction with concurrency | N2660 | |||||||
| C99 Features in C++11 | ||||||||
__func__ predefined identifier
|
N2340 | |||||||
| C99 preprocessor | N1653 | |||||||
long long type
|
N1811 | |||||||
| Extended integral types | N1988 | |||||||