Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/language/history"

From cppreference.com
< cpp‎ | language
m (Updated the link of the latest standard draft. Updating the draft document number is now done in a separate template.)
m (correct type)
 
(12 intermediate revisions by 7 users not shown)
Line 4: Line 4:
 
==Early C++==
 
==Early C++==
 
* 1979: C with Classes first implemented
 
* 1979: C with Classes first implemented
# New features: {{rlp|classes}}, {{rlp|member functions}}, {{rlp|derived class}}es, separate compilation, {{rlp|access|public and private access control}}, {{rlp|friend}}s, type checking of function arguments, {{rlp|default arguments}}, {{rlp|inline|inline functions}}, {{rlp|copy assignment|overloaded assignment operator}}, {{rlp|constructor}}s, {{rlp|destructor}}s, f() same as f(void), call-function and return-function (synchronization features, not in C++)
+
# New features: {{rlp|classes}}, {{rlp|member functions}}, {{rlp|derived class}}es, separate compilation, {{rlp|access|public and private access control}}, {{rlp|friend}}s, type checking of function arguments, {{rlp|default arguments}}, {{rlp|inline|inline functions}}, {{rlp|copy assignment|overloaded assignment operator}}, {{rlp|constructor}}s, {{rlp|destructor}}s, {{c|f()}} same as {{c|f(void)}}, call-function and return-function (synchronization features, not in C++)
 
# Libraries: the concurrent task library (not in C++)
 
# Libraries: the concurrent task library (not in C++)
 
* 1982: C with Classes reference manual published
 
* 1982: C with Classes reference manual published
Line 10: Line 10:
 
* 1985: Cfront 1.0
 
* 1985: Cfront 1.0
 
# New features: {{rlp|virtual|virtual functions}}, function and {{rlp|operators|operator overloading}}, {{rlp|reference|references}}, {{ltt|cpp/memory/new/operator_new|new}} and {{ltt|cpp/memory/new/operator_delete|delete}} operators, {{rlp|cv|the keyword {{tt|const}}}}, scope resolution operator
 
# New features: {{rlp|virtual|virtual functions}}, function and {{rlp|operators|operator overloading}}, {{rlp|reference|references}}, {{ltt|cpp/memory/new/operator_new|new}} and {{ltt|cpp/memory/new/operator_delete|delete}} operators, {{rlp|cv|the keyword {{tt|const}}}}, scope resolution operator
# Library additions: [[cpp/numeric/complex|complex number]], [[cpp/string/basic_string|string]], [[cpp/header/iostream|I/O stream]]
+
# Library additions: [[cpp/numeric/complex|complex number]], {{tt|string}} (AT&T version), [[cpp/header/iostream|I/O stream]]
 
* 1985: The C++ Programming Language, 1st edition
 
* 1985: The C++ Programming Language, 1st edition
 
* 1986: The "whatis?" paper documenting the remaining design goals, including multiple inheritance, exception handling, and templates.
 
* 1986: The "whatis?" paper documenting the remaining design goals, including multiple inheritance, exception handling, and templates.
Line 24: Line 24:
  
 
==Standard C++==
 
==Standard C++==
* 1990 ANSI C++ Committee founded
+
* 1990: ANSI C++ Committee founded
* 1991 ISO C++ Committee founded
+
* 1991: ISO C++ Committee founded
* 1992 [http://www.rrsd.com/software_development/stl/stl/ STL] implemented in C++
+
* 1992: [https://www.rrsd.com/software_development/stl/stl/ STL] implemented in C++
  
 
===C++98/03 period===
 
===C++98/03 period===
* 1998 '''C++98''' (ISO/IEC 14882:1998)
+
* 1998: '''C++98''' (ISO/IEC 14882:1998)
 
# New features: RTTI ({{rlpt|dynamic_cast}}, {{rlpt|typeid}}), {{rlp|virtual#Covariant_return_types|covariant return types}}, {{rlp|cast operator}}s, {{rlpt|cv|mutable}}, {{rlpt|types#Boolean_type|bool}}, declarations in conditions, {{rlp|templates|template instantiations}}, {{rlp|member template}}s, export
 
# New features: RTTI ({{rlpt|dynamic_cast}}, {{rlpt|typeid}}), {{rlp|virtual#Covariant_return_types|covariant return types}}, {{rlp|cast operator}}s, {{rlpt|cv|mutable}}, {{rlpt|types#Boolean_type|bool}}, declarations in conditions, {{rlp|templates|template instantiations}}, {{rlp|member template}}s, export
 
# Library additions: [[cpp/locale|locales]], {{ltt|cpp/utility/bitset}}, {{ltt|cpp/numeric/valarray}}, {{ltt|cpp/memory/auto_ptr}}, [[cpp/string/basic_string|templatized string]], [[cpp/io|I/O streams]], and [[cpp/numeric/complex|complex numbers]].
 
# Library additions: [[cpp/locale|locales]], {{ltt|cpp/utility/bitset}}, {{ltt|cpp/numeric/valarray}}, {{ltt|cpp/memory/auto_ptr}}, [[cpp/string/basic_string|templatized string]], [[cpp/io|I/O streams]], and [[cpp/numeric/complex|complex numbers]].
 
# Based on STL: [[cpp/container|containers]], [[cpp/algorithm|algorithms]], [[cpp/iterator|iterators]], [[cpp/utility/functional|function objects]]
 
# Based on STL: [[cpp/container|containers]], [[cpp/algorithm|algorithms]], [[cpp/iterator|iterators]], [[cpp/utility/functional|function objects]]
* 1998 The C++ Programming Language, 3rd edition
+
* 1998: The C++ Programming Language, 3rd edition
* 1999 [http://www.boost.org Boost] founded by the committee members to produce new high-quality candidate libraries for the standard.
+
* 1999: [https://www.boost.org Boost] founded by the committee members to produce new high-quality candidate libraries for the standard.
* 2003 '''C++03''' (ISO/IEC 14882:2003)
+
* 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 {{rlp|value initialization}}.
 
This was a minor revision, intended to be little more than a technical corrigendum. This revision introduces the definition of {{rlp|value initialization}}.
 
{{cpp/language/history/DR03}}
 
{{cpp/language/history/DR03}}
* 2006 Performance TR (ISO/IEC TR 18015:2006) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=43351 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf 2006 draft])  
+
* 2006: Performance TR (ISO/IEC TR 18015:2006) ([https://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=43351 ISO Store]) ([https://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf 2006 draft])  
 
This TR discussed the costs of various C++ abstractions, provided implementation guidance, discussed use of C++ in embedded systems and introduced {{tt|<hardware>}} interface to C's ISO/IEC TR 18037:2008 {{tt|<iohw.h>}}.
 
This TR discussed the costs of various C++ abstractions, provided implementation guidance, discussed use of C++ in embedded systems and introduced {{tt|<hardware>}} interface to C's ISO/IEC TR 18037:2008 {{tt|<iohw.h>}}.
* 2007 Library extension TR1 (ISO/IEC TR 19768:2007)  ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=43289 ISO store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1745.pdf 2005 draft]).
+
* 2007: Library extension TR1 (ISO/IEC TR 19768:2007)  ([https://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=43289 ISO store]) ({{stddoc|n1745|2005 draft}}).
 
This TR is a C++ library extension, which adds the following to the C++ standard library:
 
This TR is a C++ library extension, which adds the following to the C++ standard library:
 
# From Boost: {{ltt|cpp/utility/functional/reference_wrapper}}, [[cpp/memory#Smart_pointers|Smart pointers]], [[cpp/utility/functional/mem_fn|Member function]], {{ltt|cpp/types/result_of}}, {{ltt|cpp/utility/functional/bind}}, {{ltt|cpp/utility/functional/function}}, [[cpp/types|Type Traits]], [[cpp/numeric/random|Random]], Mathematical Special Functions, {{ltt|cpp/utility/tuple}}, {{ltt|cpp/container/array}}, [[cpp/container#Unordered_associative_containers|Unordered Containers]] (including {{ltt|cpp/utility/hash}}), and [[cpp/regex|Regular Expressions]].
 
# From Boost: {{ltt|cpp/utility/functional/reference_wrapper}}, [[cpp/memory#Smart_pointers|Smart pointers]], [[cpp/utility/functional/mem_fn|Member function]], {{ltt|cpp/types/result_of}}, {{ltt|cpp/utility/functional/bind}}, {{ltt|cpp/utility/functional/function}}, [[cpp/types|Type Traits]], [[cpp/numeric/random|Random]], Mathematical Special Functions, {{ltt|cpp/utility/tuple}}, {{ltt|cpp/container/array}}, [[cpp/container#Unordered_associative_containers|Unordered Containers]] (including {{ltt|cpp/utility/hash}}), and [[cpp/regex|Regular Expressions]].
 
# From C99: mathematical functions from [[c/numeric/math|{{tt|<math.h>}}]] that were new in C99, [[cpp/string/byte/isblank|blank character class]], [[cpp/numeric/fenv|Floating-point environment]], {{ltt|cpp/io/manip/fixed|hexfloat}} I/O Manipulator, [[cpp/types/integer|fixed-size integral types]], the {{rlpt|types#Modifiers|long long}} type, {{lc|va_copy}}, the {{ltf|cpp/io/c/snprintf}} and {{ltf|cpp/io/c/vfscanf}} families of functions, and the C99 conversion specifies for {{ltf|cpp/io/c/printf}} and {{ltf|cpp/io/c/scanf}} families of functions.  
 
# From C99: mathematical functions from [[c/numeric/math|{{tt|<math.h>}}]] that were new in C99, [[cpp/string/byte/isblank|blank character class]], [[cpp/numeric/fenv|Floating-point environment]], {{ltt|cpp/io/manip/fixed|hexfloat}} I/O Manipulator, [[cpp/types/integer|fixed-size integral types]], the {{rlpt|types#Modifiers|long long}} type, {{lc|va_copy}}, the {{ltf|cpp/io/c/snprintf}} and {{ltf|cpp/io/c/vfscanf}} families of functions, and the C99 conversion specifies for {{ltf|cpp/io/c/printf}} and {{ltf|cpp/io/c/scanf}} families of functions.  
 
All of TR1 except for the special functions was included in C++11, with minor changes.
 
All of TR1 except for the special functions was included in C++11, with minor changes.
* 2010 Mathematical special functions (ISO/IEC 29124:2010) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=50511 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3060.pdf 2010 draft])
+
* 2010: Mathematical special functions (ISO/IEC 29124:2010) ([https://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=50511 ISO Store]) ({{stddoc|n3060|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 [[cpp/numeric/special_functions|merged into C++17]].
 
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 [[cpp/numeric/special_functions|merged into C++17]].
  
 
===C++11 period===
 
===C++11 period===
* 2011 '''C++11''' (ISO/IEC 14882:2011) ([http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf Post-publication draft]).
+
* 2011: '''C++11''' (ISO/IEC 14882:2011) ([https://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372 ISO Store]) ({{stddoc|n3337|2012 post-publication draft}}).
  
 
[[cpp/11|Main Article: C++11]]
 
[[cpp/11|Main Article: C++11]]
Line 55: Line 55:
 
A large number of changes were introduced to both standardize existing practices and improve the abstractions available to the C++ programmers
 
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) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=38843 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2849.pdf 2009 draft])
+
* 2011: Decimal floating-point TR (ISO/IEC TR 24733:2011) ([https://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=38843 ISO Store]) ({{stddoc|n2849|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.
+
This TR implements the decimal floating-point types from IEEE 754-2008 Standard for Floating-Point Arithmetic: {{tt|std::decimal::decimal32}}, {{tt|std::decimal::decimal64}}, and {{tt|std::decimal::decimal128}}.
* 2012 [http://isocpp.org The Standard C++ Foundation] founded
+
* 2012: [https://isocpp.org The Standard C++ Foundation] founded
* 2013 The C++ Programming Language, 4th edition
+
* 2013: The C++ Programming Language, 4th edition
  
 
===C++14 period===
 
===C++14 period===
* 2014 '''C++14''' ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64029 ISO Store]) ([https://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882%3a2014+(2016) ANSI Store]) ([https://github.com/cplusplus/draft/blob/master/papers/n4140.pdf?raw=true 2014 final draft])
+
* 2014: '''C++14''' ([https://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64029 ISO Store]) ([https://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882%3a2014+(2016) ANSI Store]) ([https://github.com/cplusplus/draft/blob/master/papers/n4140.pdf?raw=true 2014 final draft])
  
 
[[cpp/14|Main Article: C++14]]
 
[[cpp/14|Main Article: C++14]]
Line 67: Line 67:
 
Minor revision of the C++ standard
 
Minor revision of the C++ standard
  
*2015 Filesystem library TS (ISO/IEC TS 18822:2015) ([http://www.iso.org/iso/catalogue_detail.htm?csnumber=63483 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4100.pdf 2014 draft])
+
* 2015: Filesystem library TS (ISO/IEC TS 18822:2015) ([https://www.iso.org/iso/catalogue_detail.htm?csnumber=63483 ISO Store]) ({{stddoc|n4100|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.
 
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) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65241 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4507.pdf 2015 draft])
+
* 2015: Extensions for Parallelism TS (ISO/IEC TS 19570:2015) ([https://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65241 ISO Store]) ({{stddoc|n4507|2015 draft}})
 
This TS standardizes parallel and vector-parallel API for all standard library algorithms, as well as adds new algorithms such as {{tt|reduce}}, {{tt|transform_reduce}}, or {{tt|exclusive_scan}}. 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 {{tt|reduce}}, {{tt|transform_reduce}}, or {{tt|exclusive_scan}}. This TS was merged into C++17.
*2015 Extensions for Transactional Memory TS (ISO/IEC TS 19841:2015) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=66343 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4514.pdf 2015 draft])
+
* 2015: Extensions for Transactional Memory TS (ISO/IEC TS 19841:2015) ([https://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=66343 ISO Store]) ([{{stddoc|n4514|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.
 
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) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65238 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html 2015 draft])
+
* 2015: Extensions for Library Fundamentals TS (ISO/IEC TS 19568:2015) ([https://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65238 ISO Store]) ({{stddoc|n4480|2015 draft}})
 
This TS adds several new components to the C++ standard library: {{ltt|cpp/experimental/optional|optional}}, {{ltt|cpp/experimental/any|any}}, {{ltt|cpp/experimental/basic_string_view|string_view}}, {{ltt|cpp/experimental/sample|sample}}, {{ltt|cpp/experimental/search|search}}, {{ltt|cpp/experimental/apply|apply}}, [[cpp/experimental/lib_extensions#Type-erased_and_polymorphic_allocators|polymorphic allocators]], and [[cpp/experimental/lib_extensions|variable templates]] for type traits. This TS was merged into C++17.
 
This TS adds several new components to the C++ standard library: {{ltt|cpp/experimental/optional|optional}}, {{ltt|cpp/experimental/any|any}}, {{ltt|cpp/experimental/basic_string_view|string_view}}, {{ltt|cpp/experimental/sample|sample}}, {{ltt|cpp/experimental/search|search}}, {{ltt|cpp/experimental/apply|apply}}, [[cpp/experimental/lib_extensions#Type-erased_and_polymorphic_allocators|polymorphic allocators]], and [[cpp/experimental/lib_extensions|variable templates]] for type traits. This TS was merged into C++17.
*2015 Extensions for Concepts TS (ISO/IEC TS 19217:2015) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64031 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4553.pdf 2015 draft])
+
* 2015: Extensions for Concepts TS (ISO/IEC TS 19217:2015) ([https://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64031 ISO Store]) ({{stddoc|n4553|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 [[cpp/experimental/constraints|concepts]]. This TS was merged into C++20, with some omissions.
 
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 [[cpp/experimental/constraints|concepts]]. This TS was merged into C++20, with some omissions.
*2016 Extensions for Concurrency TS (ISO/IEC TS 19571:2016) ([http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65242 ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0159r0.html 2015 draft])
+
* 2016: Extensions for Concurrency TS (ISO/IEC TS 19571:2016) ([https://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65242 ISO Store]) ({{stddoc|p0159r0|2015 draft}})
 
This TS extends the C++ library to include [[cpp/experimental/concurrency|several extensions]] to {{lc|std::future}}, {{lc|std::latch|latches}} and {{lc|std::barrier|barriers}}, and atomic smart pointers.
 
This TS extends the C++ library to include [[cpp/experimental/concurrency|several extensions]] to {{lc|std::future}}, {{lc|std::latch|latches}} and {{lc|std::barrier|barriers}}, and atomic smart pointers.
  
 
===C++17 period===
 
===C++17 period===
* 2017 '''C++17''' ([https://www.iso.org/standard/68564.html ISO Store]) ([https://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882%3a2017+(2018) ANSI Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf n4659 (2017-03-21 final draft)])
+
* 2017: '''C++17''' ([https://www.iso.org/standard/68564.html ISO Store]) ([https://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882%3a2017+(2018) ANSI Store]) ({{stddoc|n4659|n4659 2017-03-21 final draft}})
  
 
[[cpp/17|Main Article: C++17]]
 
[[cpp/17|Main Article: C++17]]
Line 87: Line 87:
 
The major revision of the C++ standard after C++11
 
The major revision of the C++ standard after C++11
  
*2017 Extensions for Ranges TS (ISO/IEC TS 21425:2017) ([https://www.iso.org/standard/70910.html ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4685.pdf 2017 draft])
+
* 2017: Extensions for Ranges TS (ISO/IEC TS 21425:2017) ([https://www.iso.org/standard/70910.html ISO Store]) ({{stddoc|n4685|2017 draft}})
 
This TS extends the C++ library to include [[cpp/experimental/ranges|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 {{c|sort(v);}}
 
This TS extends the C++ library to include [[cpp/experimental/ranges|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 {{c|sort(v);}}
*2017 Extensions for Coroutines TS (ISO/IEC TS 22277:2017) ([https://www.iso.org/standard/73008.html ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4680.pdf 2017 draft])
+
* 2017: Extensions for Coroutines TS (ISO/IEC TS 22277:2017) ([https://www.iso.org/standard/73008.html ISO Store]) ({{stddoc|n4680|2017 draft}})
 
This TS extends the C++ core language and the standard library to include stackless coroutines (resumable functions). This adds the keywords {{ltt|cpp/keyword/co_await}}, {{ltt|cpp/keyword/co_yield}}, and {{ltt|cpp/keyword/co_return}}.
 
This TS extends the C++ core language and the standard library to include stackless coroutines (resumable functions). This adds the keywords {{ltt|cpp/keyword/co_await}}, {{ltt|cpp/keyword/co_yield}}, and {{ltt|cpp/keyword/co_return}}.
*2018 Extensions for Networking TS (ISO/IEC TS 19216:2018) ([https://www.iso.org/standard/64030.html ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/n4734.pdf 2017 draft])
+
* 2018: Extensions for Networking TS (ISO/IEC TS 19216:2018) ([https://www.iso.org/standard/64030.html ISO Store]) ({{stddoc|n4734|2017 draft}})
 
This TS extends the C++ library to include TCP/IP networking based on [https://www.boost.org/doc/libs/1_67_0/doc/html/boost_asio.html boost.asio].
 
This TS extends the C++ library to include TCP/IP networking based on [https://www.boost.org/doc/libs/1_67_0/doc/html/boost_asio.html boost.asio].
*2018 Extensions for modules TS (ISO/IEC TS 21544:2018) ([https://www.iso.org/standard/71051.html ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/n4720.pdf 2018 draft])
+
* 2018: Extensions for modules TS (ISO/IEC TS 21544:2018) ([https://www.iso.org/standard/71051.html ISO Store]) ({{stddoc|n4720|2018 draft}})
This TS extends the C++ core language to include modules. This adds the special identifiers {{ltt|cpp/keyword/module}}, {{ltt|cpp/keyword/import}}, and reintroduces the keyword {{ltt|cpp/keyword/export|export}} with a new meaning.
+
This TS extends the C++ core language to include modules. This adds the special identifiers {{ltt|cpp/identifier_with_special_meaning/module}}, {{ltt|cpp/identifier_with_special_meaning/import}}, and reintroduces the keyword {{ltt|cpp/keyword/export|export}} with a new meaning.
*2018 Extensions for Parallelism version 2 TS (ISO/IEC TS 19570:2018) ([https://www.iso.org/standard/70588.html ISO Store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/n4773.pdf draft])
+
* 2018: Extensions for Parallelism version 2 TS (ISO/IEC TS 19570:2018) ([https://www.iso.org/standard/70588.html ISO Store]) ({{stddoc|n4773|2018 draft}})
 
This TS extends the C++ library to include two new execution policies ({{c|unseq}} and {{c|vec}}), additional parallel algorithms such as {{c|reduction_plus}} or {{c|for_loop_strided}}, task blocks for forking and joining parallel tasks, SIMD types and operations on those types.
 
This TS extends the C++ library to include two new execution policies ({{c|unseq}} and {{c|vec}}), additional parallel algorithms such as {{c|reduction_plus}} or {{c|for_loop_strided}}, task blocks for forking and joining parallel tasks, SIMD types and operations on those types.
  
 
===C++20 period===
 
===C++20 period===
* 2020 '''C++20''' ([https://www.iso.org/standard/79358.html ISO Store]) ([https://isocpp.org/files/papers/N4860.pdf n4860 (2020-03-31 final draft)])
+
* 2020: '''C++20''' ([https://www.iso.org/standard/79358.html ISO Store]) (final draft {{stddoc|n4860|n4860 2020-03-31}})
  
 
[[cpp/20|Main Article: C++20]]
 
[[cpp/20|Main Article: C++20]]
Line 105: Line 105:
 
The major revision of the C++ standard after C++17
 
The major revision of the C++ standard after C++17
  
* 2021 Reflection TS (ISO/IEC TS 23619:2021) ([https://www.iso.org/standard/76425.html ISO store]) ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4856.pdf 2020 draft])
+
* 2021: Reflection TS (ISO/IEC TS 23619:2021) ([https://www.iso.org/standard/76425.html ISO store]) ({{stddoc|n4856|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.
 
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===
 
===Future development===
 
* [[cpp/experimental|Experimental technical specifications]]
 
* [[cpp/experimental|Experimental technical specifications]]
* 2023 '''C++23''' ({{stddoc latest draft|latest draft}})
+
* 20{{stdinfo next version number}}: '''{{stdinfo next version}}''' latest draft {{stddoc latest draft|{{stdinfo latest draft docnum}} ({{stdinfo latest draft docdate}})}}
  
 
[[cpp/23|Main Article: C++23]]
 
[[cpp/23|Main Article: C++23]]
Line 118: Line 118:
 
===See also===
 
===See also===
 
{{dsc begin}}
 
{{dsc begin}}
{{dsc see c | c/language/history |History of C | nomono=true}}
+
{{dsc see c|c/language/history|History of C|nomono=true}}
 
{{dsc end}}
 
{{dsc end}}
  
 
===External links===
 
===External links===
*[http://www.stroustrup.com/hopl2.pdf A History of C++: 1979-1991]
+
{{elink begin}}
*[http://www.stroustrup.com/hopl-almost-final.pdf Evolving a language in and for the real world: C++ 1991-2006]
+
{{elink|[https://www.stroustrup.com/hopl2.pdf A History of C++: 1979-1991]}}
*[https://www.stroustrup.com/hopl20main-p5-p-bfc9cd4--final.pdf Thriving in a crowded and changing world: C++ 2006-2020]
+
{{elink|[https://www.stroustrup.com/hopl-almost-final.pdf Evolving a language in and for the real world: C++ 1991-2006]}}
*[http://isocpp.org Standard C++ foundation]
+
{{elink|[https://www.stroustrup.com/hopl20main-p5-p-bfc9cd4--final.pdf Thriving in a crowded and changing world: C++ 2006-2020]}}
*[[:enwiki:C++#History | C++ on Wikipedia]]
+
{{elink|[https://isocpp.org Standard C++ foundation]}}
*[http://www.open-std.org/jtc1/sc22/wg21/ C++ Standards Committee]
+
{{elink|{{enwiki|C++#History|C++ on Wikipedia}}}}
 +
{{elink|[https://www.open-std.org/jtc1/sc22/wg21/ C++ Standards Committee]}}
 +
{{elink end}}
  
 
{{langlinks|de|es|fr|it|ja|pt|ru|zh}}
 
{{langlinks|de|es|fr|it|ja|pt|ru|zh}}

Latest revision as of 11:08, 13 September 2024

 
 
C++ language
General topics
Flow control
Conditional execution statements
if
Iteration statements (loops)
for
range-for (C++11)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications (until C++17*)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
const/volatile
decltype (C++11)
auto (C++11)
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
explicit (C++11)
static

Special member functions
Templates
Miscellaneous
History of C++
 

Contents

[edit] 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

[edit] Standard C++

  • 1990: ANSI C++ Committee founded
  • 1991: ISO C++ Committee founded
  • 1992: STL implemented in C++

[edit] 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.

[edit] 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.

[edit] 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.

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

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.

[edit] 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.

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

[edit] 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.

[edit] Future development

Main Article: C++23

The next major revision of the C++ standard

[edit] See also

C documentation for History of C

[edit] External links

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