History of C++
Early C++
- 1979: C with Classes first implemented
- New features: classes, member functions, derived classes, separate compilation, public and private access control, friends, type checking of function arguments, default arguments, inline functions, overloaded assignment operator, constructors, destructors, f() same as f(void)
- Libraries: the concurrent task library (not in C++)
- 1982: C with Classes reference manual published
- 1984: C84 implemented, reference manual published
- 1985: Cfront 1.0
- New features: virtual functions, function and operator overloading, references, new and delete operators, the keyword
const
- Library additions: complex number,
string
(AT&T version), I/O stream
- 1985: The C++ Programming Language, 1st edition
- 1986: The "whatis?" paper documenting the remaining design goals, including multiple inheritance, exception handling, and templates.
- 1987: C++ support in GCC 1.15.3
- 1989: Cfront 2.0
- New features: multiple inheritance, pointers to members, protected access, type-safe linkage, abstract classes, static and const-qualified member functions, class-specific new and delete
- Library additions: I/O manipulators
- 1990: The Annotated C++ Reference Manual
This book described the language as designed, including some features that were not yet implemented. It served as the de-facto standard until the ISO.
- New features: namespaces, exception handling, nested classes, templates
- 1991: Cfront 3.0
- 1991: The C++ Programming Language, 2nd edition
Standard C++
- 1990: ANSI C++ Committee founded
- 1991: ISO C++ Committee founded
- 1992: STL implemented in C++
C++98/03 period
- 1998: C++98 (ISO/IEC 14882:1998)
- New features: RTTI (
dynamic_cast
,typeid
), covariant return types, cast operators,mutable
,bool
, declarations in conditions, template instantiations, member templates - Library additions: locales, bitset, valarray, auto_ptr, templatized string, I/O streams, and complex numbers
- Based on STL: containers, algorithms, iterators, function objects
- 1998: The C++ Programming Language, 3rd edition
- 1999: Boost founded by the committee members to produce new high-quality candidate libraries for the standard.
- 2003: C++03 (ISO/IEC 14882:2003)
This was a minor revision, intended to be little more than a technical corrigendum. This revision introduces the definition of value initialization.
- 2006: Performance TR (ISO/IEC TR 18015:2006) (ISO Store) (2006 draft
This TR discussed the costs of various C++ abstractions, provided implementation guidance, discussed use of C++ in embedded systems and introduced <hardware>
interface to C's ISO/IEC TR 18037:2008 <iohw.h>
- 2007: Library extension TR1 (ISO/IEC TR 19768:2007) (ISO store) (2005 draft
This TR is a C++ library extension, which adds the following to the C++ standard library:
- From Boost: reference_wrapper, Smart pointers, Member function, result_of, bind, function, Type Traits, Random, Mathematical Special Functions, tuple, array, Unordered Containers (including hash), and Regular Expressions
- From C99: mathematical functions from
<math.h>
that were new in C99, blank character class, Floating-point environment, hexfloat I/O Manipulator, fixed-size integral types, thelong long
type, va_copy, the snprintf() and vfscanf() families of functions, and the C99 conversion specifies for printf() and scanf()
All of TR1 except for the special functions was included in C++11, with minor changes.
- 2010: Mathematical special functions (ISO/IEC 29124:2010) (ISO Store) (2010 draft
This international standard is a C++ standard library extension, which adds the special functions that were part of TR1, but were not included in C++11: elliptic integrals, exponential integral, Laguerre polynomials, Legendre polynomials, Hermite polynomials, Bessel functions, Neumann functions, beta function, and Riemann zeta function. This standard was merged into C++17
C++11 period
- 2011: C++11 (ISO/IEC 14882:2011) (ISO Store) (2012 post-publication draft
A large number of changes were introduced to both standardize existing practices and improve the abstractions available to the C++ programmers
- 2011: Decimal floating-point TR (ISO/IEC TR 24733:2011) (ISO Store) (2009 draft
This TR implements the decimal floating-point types from IEEE 754-2008 Standard for Floating-Point Arithmetic: std::decimal::decimal32
, std::decimal::decimal64
, and std::decimal::decimal128
.
- 2012: The Standard C++ Foundation founded
- 2013: The C++ Programming Language, 4th edition
C++14 period
- 2014: C++14 (ISO Store) (ANSI Store) (2014 final draft
Minor revision of the C++ standard
- 2015: Filesystem library TS (ISO/IEC TS 18822:2015) (ISO Store) (2014 draft
This TS is an experimental C++ library extension that specifies a filesystem library based on boost.filesystem V3 (with some modifications and extensions). This TS was merged into C++17.
- 2015: Extensions for Parallelism TS (ISO/IEC TS 19570:2015) (ISO Store) (2015 draft
This TS standardizes parallel and vector-parallel API for all standard library algorithms, as well as adds new algorithms such as reduce
, transform_reduce
, or exclusive_scan
- 2015: Extensions for Transactional Memory TS (ISO/IEC TS 19841:2015) (ISO Store) ([2015 draft
This TS extends the C++ core language with synchronized and atomic blocks, as well as transaction-safe functions, which implement transactional memory semantics.
- 2015: Extensions for Library Fundamentals TS (ISO/IEC TS 19568:2015) (ISO Store) (2015 draft
This TS adds several new components to the C++ standard library: optional, any, string_view, sample, search, apply, polymorphic allocators, and variable templates
- 2015: Extensions for Concepts TS (ISO/IEC TS 19217:2015) (ISO Store) (2015 draft
This TS extends the C++ core language with concepts (named type requirements) and constraints (limits on the types allowed in template, function, and variable declarations), which aids metaprogramming and simplifies template instantiation diagnostics, see concepts
- 2016: Extensions for Concurrency TS (ISO/IEC TS 19571:2016) (ISO Store) (2015 draft
This TS extends the C++ library to include several extensions to std::future, latches and barriers
C++17 period
- 2017: C++17 (ISO Store) (ANSI Store) (n4659 2017-03-21 final draft
The major revision of the C++ standard after C++11
- 2017: Extensions for Ranges TS (ISO/IEC TS 21425:2017) (ISO Store) (2017 draft
This TS extends the C++ library to include ranges sort(v);
- 2017: Extensions for Coroutines TS (ISO/IEC TS 22277:2017) (ISO Store) (2017 draft
This TS extends the C++ core language and the standard library to include stackless coroutines (resumable functions). This adds the keywords co_await, co_yield, and co_return
- 2018: Extensions for Networking TS (ISO/IEC TS 19216:2018) (ISO Store) (2017 draft
This TS extends the C++ library to include TCP/IP networking based on boost.asio.
- 2018: Extensions for modules TS (ISO/IEC TS 21544:2018) (ISO Store) (2018 draft
This TS extends the C++ core language to include modules. This adds the special identifiers module, import, and reintroduces the keyword export
- 2018: Extensions for Parallelism version 2 TS (ISO/IEC TS 19570:2018) (ISO Store) (2018 draft
This TS extends the C++ library to include two new execution policies (unseq and vec), additional parallel algorithms such as reduction_plus or for_loop_strided
C++20 period
- 2020: C++20 (ISO Store) (final draft n4860 2020-03-31)
The major revision of the C++ standard after C++17
- 2021: Reflection TS (ISO/IEC TS 23619:2021) (ISO store) (2020 draft)
This TS extends C++ with the facilities to inspect program entities such as variables, enumerations, classes and their members, lambdas and their captures, etc.
Future development
- Experimental technical specifications
- 2026: C++ latest draft n5001 (2024-12-17)
The next major revision of the C++ standard
See also
C documentation for History of C
|