C++ Versions Cheatsheet
Before the standad
- 1985-10
- Cfront 1.0
- 1985-10
- The C++ Programming Language 1st ed. (TC++PL)
- 1987-02
- Cfront 1.2
- 1989-06
- Cfront 2.0
- 1990-05
- The Annotated C++ Reference Manual (ARM)
- 1991-06
- The C++ Programming Language 2nd ed. (TC++PL2)
- 1991-10
- Cfront 3.0
Standard Revisions
Year | C++ Standard | Informal name |
---|---|---|
1998 | ISO/IEC 14882:1998[19] | C++98 |
2003 | ISO/IEC 14882:2003[18] | C++03 |
2007 | ISO/IEC TR 19768:2007[17] | C++TR1 |
2011 | ISO/IEC 14882:2011[16] | C++11 (C++0x) |
2014 | ISO/IEC 14882:2014(E) | C++14 (C++1y) |
2017 | C++17 (C++1z) |
Relevant Language Versions
Roughly corresponding to the editions of TC++PL
- 1985
- Cfront 1.0 / TC++PL
(initial release) - 1991
- ARM (includes Cfront 2 changes)
(preliminar standard) refinement: TC++PL2 - 1998
- C++98 / TC++PL3
(final standard) refinement: C++03 - 2011
- C++11 / TC++PL4
(standard revision) refinement: C++14
Major features per revision
TC++PL / Cfront 1.0
- (extensions to K&R C)
- function prototypes
- single precision float
- function overloading
- operator overloading
- inline functions
- const
- reference types
- new & delete operators
- classes
- class / enum types
- void*
- anonimous functions
- Stream I/O libraries
Cfront 2.0
- multiple inheritance
- type-safe linkage
- abstract classes
- static member functions
- const member functions
- protected members (Cfront 1.2)
- generalized initializers, base and member initializers
- overloading ->
- pointers tomembers (Cfront 1.2)
ARM
- templates
- exception handling
- nested classes
- independent prefix/postfix ++ overloading
- initialization of local static arrays allowed
- volatile
- (implemented in Cfront 3.0 except for exceptions)
TC++PL2
- overload considered anachronism
- new deleted can be overloaded
- extern linkage specifications
C++98
__cplusplus = 199711L
- covariant return types (overriding relaxation)
- namespaces
- template improvements, partial specialization, member templates, default arguments
- use of members ahead of declaration
- for statement initializers (scope of controlled variables)
- run time type identification
- Standard Library
C++03
- (standard bug fixes)
- Standard Library:
- contiguous storage requirement for vector
C++TR1 (Library Extensions)
- Standard Library: (std::tr1 namespace) (mostly from Boost)
- reference wrapper
- smart pointers (auto_ptr)
- function objects
- metaprogramming type traits
- random number generation
- mathematical special functions
- tuple types
- fixed-size array
- hash tables
- regular expressions
C++11
__cplusplus = 201103L
- move constructors, Rvalue references
- constexpr
- extern template
- initializer lists
- uniform initialization syntax type var{…};
- auto type inference
- range for loops
- lambda expressions
- new function declaration with trailing return type -> …
- object construction delegation
- explicit override and final
- nullptr
- enum class (strongly type enumerations)
- multiple right angle closing brackets »
- explicit
- template aliases
- unrestricted unions
- variadic templates
- new string literals u8””, u”” …
- user-defined literals
- multithreading memory model, thread-local storeage, …
- default and delete member functions
- long long int
- static_assert
- sizeof class member
- alignof, alignas
-
attributes [[xxx]]
- Standard Library:
- threading facilites
- tuple types
- hash tables
- regular expressions
- smart pointers (unique_ptr to replace auto_ptr; shared_ptr; weak_ptr; make_unique, make_shared)
- extensible randon numbers
- wrapper reference
- polymorphic function wrappers
- type traits for metaprogramming
C++14
__cplusplus = 201402L
- auto function return type deduction
- alternate type deduction on declaration
- relaxed constexpr restrictions
- variable templates
- aggregate member initialization
- binary literals
- digit separators
- generic lambdas
- lambda captures expressions
-
[[deprecated]] attribute
- Standard Library:
- shared mutexes and locking
- standard user-defined literals