Supported C++ and C Language Features
[The following information reflects version 4.14 of the C++ front end, which was released in September 2017.]
The front end accepts the C++ language as defined by the ISO/IEC 14882:2014 ("C++14") standard (and can be configured to accept earlier versions of the standard, i.e., ISO/IEC 14882:2011 and ISO/IEC 14882:2003). It also accepts the C language as defined by the ISO/IEC 9899:2011 ("C11") ISO/IEC 9899:1999 ("C99") and ISO/IEC 9899:1990 ("C89") standards and the "Embedded C" extensions of ISO/IEC TR 18037.
A list of C++17 features and their current implementation status can be found here.
A list of the C++14 features and the EDG releases in which they've been implemented can be retrieved by clicking here.
The list of C++11 features and the EDG releases can be retrieved by clicking here.
Accepting standard C++ and C is nice, but in the real world hardly any programs are written in completely standard-conforming C++ or C. The front end's "strict" standard C++ and C modes are useful for running test suites and ensuring that a program contains no nonstandard usage, but may be a bit too pedantic for everyday use. Therefore, the front end also offers slightly more relaxed default modes for C++ and C, and compatibility modes for some of the most popular compilers' dialects:
- A Microsoft C and C++ compatibility mode, which provides the extensions supported by the Microsoft Visual C++ compiler (through Visual Studio 2015, including the C++/CLI features), along with various undocumented features and bugs.
- A GNU C and C++ compatibility mode, which provides the extensions supported by GCC (versions 3.2-5.3), along with various undocumented features and bugs. The compatibility is good enough that the front end can compile the Linux kernel and utilities.
- A Clang C and C++ compatibility mode.
- A Sun C++ compatibility mode.
- A cfront compatibility mode, which emulates the old AT&T cfront processor.