Namespaces
Variants

History of C++

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous
History of C++

Contents

Early C++

  • 1979: C with Classes first implemented
  1. 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++)
  2. 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
  1. New features: virtual functions , function and operator overloading , references , new and delete operators, the keyword const , scope resolution operator
  2. 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
  1. 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
  2. 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.

  1. 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)
  1. New features: RTTI ( dynamic_cast , typeid ), covariant return types , cast operators , mutable , bool , declarations in conditions, template instantiations , member templates , export
  2. Library additions: locales , bitset , valarray , auto_ptr , templatized string , I/O streams , and complex numbers .
  3. 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 .

Defect Reports fixed in C++03 (92 core, 125 library)

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> .

This TR is a C++ library extension, which adds the following to the C++ standard library:

  1. 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 .
  2. 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 , the long long type, 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.

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

Main Article: C++11

A large number of changes were introduced to both standardize existing practices and improve the abstractions available to the C++ programmers

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 .

C++14 period

Main Article: C++14

Minor revision of the C++ standard

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.

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.

This TS extends the C++ core language with synchronized and atomic blocks, as well as transaction-safe functions, which implement transactional memory semantics.

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.

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.

This TS extends the C++ library to include several extensions to std::future , latches and barriers , and atomic smart pointers.

C++17 period

Main Article: C++17

The major revision of the C++ standard after C++11

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 ) ;

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 .

This TS extends the C++ library to include TCP/IP networking based on boost.asio .

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.

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

Main Article: C++20

The major revision of the C++ standard after C++17

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

Main Article: C++23

The next major revision of the C++ standard

See also

C documentation for History of C

External links

1. A History of C++: 1979-1991
2. Evolving a language in and for the real world: C++ 1991-2006
3. Thriving in a crowded and changing world: C++ 2006-2020
4. Standard C++ foundation
5. C++ on Wikipedia
6. C++ Standards Committee