Modern C++ Language Features Compliance Status

From RAD Studio
Jump to: navigation, search

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
Allowed.png
Allowed.png
static_assert with no message N3928
Allowed.png
Allowed.png
typename in a template template parameter N4051
Allowed.png
Allowed.png
Removing trigraphs N4086
Allowed.png
Allowed.png
Nested namespace definition N4230
Allowed.png
Allowed.png
Attributes for namespaces and enumerators N4266
Allowed.png
Allowed.png
u8 character literals N4267
Allowed.png
Allowed.png
Allow constant evaluation for all non-type template arguments N4268
Allowed.png
Allowed.png
Fold Expressions N4295
Allowed.png
Allowed.png
Remove Deprecated Use of the register Keyword P0001R1
Allowed.png
Allowed.png
Remove Deprecated operator++(bool) P0002R1
Allowed.png
Allowed.png
Removing Deprecated Exception Specifications from C++17 P0003R5
Allowed.png
Allowed.png
Make exception specifications part of the type system P0012R1
Allowed.png
Allowed.png
Aggregate initialization of classes with base classes P0017R1
Allowed.png
Allowed.png
Lambda capture of *this P0018R3
Allowed.png
Allowed.png
Using attribute namespaces without repetition P0028R4
Allowed.png
Allowed.png
Dynamic memory allocation for over-aligned data P0035R4
Allowed.png
Allowed.png
Unary fold expressions and empty parameter packs P0036R0
Allowed.png
Allowed.png
__has_include in preprocessor conditionals P0061R1
Allowed.png
Allowed.png
Template argument deduction for class templates P0091R3
Allowed.png
Allowed.png
Non-type template parameters with auto type P0127R2
Allowed.png
Allowed.png
Guaranteed copy elision P0135R1
Allowed.png
Allowed.png
New specification for inheriting constructors (DR1941 et al) P0136R1
Allowed.png
Allowed.png
Replacement of class objects containing reference members P0137R1
Direct-list-initialization of enumerations P0138R2
Allowed.png
Allowed.png
Stricter expression evaluation order P0145R3
Allowed.png
Allowed.png
constexpr lambda expressions P0170R1
Allowed.png
Allowed.png
Differing begin and end types in range-based for P0184R0
Allowed.png
Allowed.png
[[fallthrough]] attribute P0188R1
Allowed.png
Allowed.png
[[nodiscard]] attribute P0189R1
Allowed.png
Allowed.png
Pack expansions in using-declarations P0195R2
Allowed.png
Allowed.png
[[maybe_unused]] attribute P0212R1
Allowed.png
Allowed.png
Structured Bindings P0217R3
Allowed.png
Allowed.png
Hexadecimal floating-point literals P0245R1
Allowed.png
Allowed.png
Ignore unknown attributes P0283R2
Allowed.png
Allowed.png
constexpr if statements P0292R2
Allowed.png
Allowed.png
init-statements for if and switch P0305R1
Allowed.png
Allowed.png
Inline variables P0386R2
Allowed.png
Allowed.png
DR: Matching of template template-arguments excludes compatible templates P0522R0
Allowed.png
Allowed.png
std::uncaught_exceptions() N4259
Allowed.png
Allowed.png
Improving std::pair and std::tuple N4387
Allowed.png
Allowed.png
std::any P0220R1
Allowed.png
Allowed.png
std::variant P0088R3
Allowed.png
Allowed.png
std::optional P0220R1
Allowed.png
Allowed.png
std::shared_mutex (untimed) N4508
Allowed.png
Allowed.png
std::string_view N3921
Allowed.png
Allowed.png
Standardization of Parallelism TS P0024R2
Elementary string conversions P0067R5
Mathematical special functions P0226R1
Allowed.png
Allowed.png
Splicing Maps and Sets P0083R3
Hardware interference size P0154R1
std::filesystem P0218R1
Allowed.png
Allowed.png
std::byte P0298R3
Allowed.png
Allowed.png

C++14 Features

Feature C++14 Proposal Document BCC32C/X BCC64
Tweaked wording for contextual conversions N3323
Allowed.png
Allowed.png
Binary literals N3472
Allowed.png
Allowed.png
decltype(auto), Return type deduction for normal functions N3638
Allowed.png
Allowed.png
Initialized/Generalized lambda captures (init-capture) N3648
Allowed.png
Allowed.png
Generic (polymorphic) lambda expressions N3649
Allowed.png
Allowed.png
Variable templates N3651
Allowed.png
Allowed.png
Extended constexpr N3652
Allowed.png
Allowed.png
Member initializers and aggregates (NSDMI) N3653
Allowed.png
Allowed.png
Clarifying memory allocation (avoiding/fusing allocations) N3664
Allowed.png
Allowed.png
[[deprecated]] attribute N3760
Allowed.png
Allowed.png
Sized deallocation N3768
Allowed.png
Allowed.png
Single quote as digit separator N3781
Allowed.png
Allowed.png
std::result_of and SFINAE N3462
Allowed.png
Allowed.png
constexpr for <complex> N3302
Allowed.png
Allowed.png
constexpr for <chrono> N3469
Allowed.png
Allowed.png
constexpr for <array> N3470
Allowed.png
Allowed.png
constexpr for <initializer_list>, <utility> and <tuple> N3471
Allowed.png
Allowed.png
Improved std::integral_constant N3545
Allowed.png
Allowed.png
User-defined literals for <chrono> and <string> N3642
Allowed.png
Allowed.png
Null forward iterators N3644
Allowed.png
Allowed.png
std::quoted N3654
Allowed.png
Allowed.png
Heterogeneous associative lookup N3657
Allowed.png
Allowed.png
std::integer_sequence N3658
Allowed.png
Allowed.png
std::shared_timed_mutex N3659
Allowed.png
Allowed.png
std::exchange N3668
Allowed.png
Allowed.png
fixing constexpr member functions without const N3669
Allowed.png
Allowed.png
std::get<T>() N3670
Allowed.png
Allowed.png
Dual-Range std::equal, std::is_permutation, std::mismatch N3671
Allowed.png
Allowed.png

C++11 Features

Feature C++11 Proposal
Document
BCC32C/X BCC32 BCC64 BCCOSX BCCIOSARM BCCIOSARM64 BCCAARM
Rvalue references N2118
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
    Rvalue references for *this N2439
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Initialization of class objects by rvalues N1610
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Non-static data member initializers N2756
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Variadic templates N2242
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
    Extending variadic template template parameters N2555
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Initializer lists N2672
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Static assertions N1720
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
auto-typed variables N1984
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
    Multi-declarator auto N1737
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
    Removal of auto as a storage-class specifier N2546
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
    New function declarator syntax N2541
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Lambda expressions N2927
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Declared type of an expression N2343
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
    Incomplete return types N3276
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Right angle brackets N1757
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Default template arguments for function templates DR226
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Solving the SFINAE problem for expressions DR339
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Alias templates N2258
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Extern templates N1987
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Null pointer constant N2431
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Strongly-typed enums N2347
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Forward declarations for enums N2764
DR1206
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Standardized attribute syntax N2761
Allowed.png
Generalized constant expressions N2235
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Alignment support N2341
Allowed.png
Conditionally-support behavior N1627
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Changing undefined behavior into diagnosable errors N1727
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Delegating constructors N1986
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Inheriting constructors N2540
Allowed.png
Explicit conversion operators N2437
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
New character types N2249
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Unicode string literals N2442
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Raw string literals N2442
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Universal character names in literals N2170
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
User-defined literals N2765
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Standard Layout Types N2342
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Defaulted functions N2346
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Deleted functions N2346
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Extended friend declarations N1791
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Extending sizeof N2253
DR850
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Inline namespaces N2535
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Unrestricted unions N2544
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Local and unnamed types as template arguments N2657
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Range-based for N2930
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Explicit virtual overrides N2928
N3206
N3272
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Minimal support for garbage collection and reachability-based leak detection N2670
Allowing move constructors to throw [noexcept] N3050
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Defining move special member functions N3053
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Concurrency
Sequence points N2239
Allowed.png
Atomic operations N2427
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Strong Compare and Exchange N2748
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Bidirectional Fences N2752
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Memory model N2429
Allowed.png
Data-dependency ordering: atomics and memory model N2664
Allowed.png
Propagating exceptions N2179
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allow atomics use in signal handlers N2547
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Thread-local storage N2659
Allowed.png
Dynamic initialization and destruction with concurrency N2660
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
C99 Features in C++11
__func__ predefined identifier N2340
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
C99 preprocessor N1653
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
long long type N1811
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Extended integral types N1988
Allowed.png
Allowed.png
Allowed.png
Allowed.png
Allowed.png

See Also