History of C++
Contents |
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 ) , call-function and return-function (synchronization features, not in C++)
- 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, scope resolution operator -
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 , export - 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 longtype, va_copy , the snprintf() and vfscanf() families of functions, and the C99 conversion specifies for printf() and scanf() families of functions.
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
. This TS was merged into C++17.
- 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 for type traits. This TS was merged into C++17.
- 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 . This TS was merged into C++20, with some omissions.
- 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 , and atomic smart pointers.
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 , a new, more powerful, abstraction to replace iterator pairs, along with range views, sentinel ranges, projections for on-the-fly transformations, new iterator adaptors and algorithms. This extension finally makes it possible to sort a vector with 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 with a new meaning.
- 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 , task blocks for forking and joining parallel tasks, SIMD types and operations on those types.
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 n5008 (2025-03-15)
The next major revision of the C++ standard
See also
|
C documentation
for
History of C
|