C++17

C++17 is a version of the ISO/IEC 14882 standard for the C++ programming language. C++17 replaced the prior version of the C++ standard, called C++14, and was later replaced by C++20.

History

Before the C++ Standards Committee fixed a 3-year release cycle, C++17's release date was uncertain. In that time period, the C++17 revision was also called C++1z, following C++0x or C++1x for C++11 and C++1y for C++14. The C++17 specification reached the Draft International Standard (DIS) stage in March 2017. This DIS was unanimously approved, with only editorial comments, and the final standard was published as ISO/IEC 14882:2017 in December 2017. Few changes were made to the C++ Standard Template Library, although some algorithms in the <algorithm> header were given support for explicit parallelization and some syntactic enhancements were made.

New features

C++17 introduced many new features. The following lists may be incomplete.

Language

Library

Removed features

This revision of C++ not only added new features but also removed a few.

Compiler support

Library support

See also

References

  1. ↑ "N4661 Editors' Report -- Programming Languages -- C++". 21 March 2017. Archived from the original on 2020-02-04. Retrieved 2017-03-21.
  2. ↑ "ISO/IEC DIS 14882: Programming Languages — C++" (PDF). Archived from the original (PDF) on 2017-03-25.
  3. ↑ Herb Sutter (6 September 2017). "C++17 is formally approved". Archived from the original on 29 January 2020. Retrieved 12 September 2017.
  4. ↑ "ISO/IEC 14882:2017". Archived from the original on 2013-01-29. Retrieved 2017-12-03.
  5. ↑ "N3928: Extending static_assert, v2 (Walter E. Brown)" (PDF). Archived (PDF) from the original on 2015-08-11. Retrieved 2015-04-03.
  6. ↑ "N4051: Allow typename in a template template parameter (Richard Smith)". Archived from the original on 2015-08-11. Retrieved 2015-04-03.
  7. ↑ "N3922: New Rules for auto deduction from braced-init-list (James Dennett)". Archived from the original on 2015-08-10. Retrieved 2014-11-28.
  8. 1 2 3 "Updates to my trip report". Archived from the original on 2015-03-19. Retrieved 2014-11-28.
  9. ↑ "N4230: Nested namespace definition (Robert Kawulak, Andrew Tomazos)". Archived from the original on 2015-08-03. Retrieved 2014-11-28.
  10. 1 2 3 4 5 "New core language papers adopted for C++17". Archived from the original on 2015-04-27. Retrieved 2014-11-15.
  11. ↑ "N4266: Attributes for namespaces and enumerators (Richard Smith)". Archived from the original on 2016-03-06. Retrieved 2014-11-15.
  12. ↑ "N4640: Working Draft, Standard for Programming Language C++" (PDF). pp. 193–195. Archived (PDF) from the original on 2017-03-12. Retrieved 2017-03-09.
  13. ↑ "N4267: Adding u8 character literals (Richard Smith)". Archived from the original on 2015-10-28. Retrieved 2014-11-15.
  14. ↑ Thomas Köppe. "Hexadecimal floating literals for C++". Archived from the original on 2022-09-21. Retrieved 2017-07-16.
  15. ↑ "N4659: Working Draft, Standard for Programming Language C++" (PDF). §5.13.4. Archived (PDF) from the original on 2017-12-07. Retrieved 2017-03-24.
  16. ↑ James Touton; Mike Spertus (2016-06-23). "Declaring non-type template parameters with auto". Archived from the original on 2017-09-16. Retrieved 2020-11-08.
  17. ↑ "N4268: Allow constant evaluation for all non-type template arguments (Richard Smith)". Archived from the original on 2016-03-12. Retrieved 2014-11-15.
  18. ↑ "N4295: Folding expressions (Andrew Sutton, Richard Smith)". Archived from the original on 2015-04-04. Retrieved 2014-11-15.
  19. ↑ "N4659: Working Draft, Standard for Programming Language C++" (PDF). §9.4.1. Archived (PDF) from the original on 2017-12-07. Retrieved 2017-03-24.
  20. ↑ "N4659: Working Draft, Standard for Programming Language C++" (PDF). §11.5. Archived (PDF) from the original on 2017-12-07. Retrieved 2017-03-24.
  21. ↑ "Selection statements with initializer". Archived from the original on 2017-10-06. Retrieved 2018-10-09.
  22. ↑ "Dynamic memory allocation for over-aligned data". Archived from the original on 2017-09-08. Retrieved 2017-03-13.
  23. ↑ "Class template argument deduction". Archived from the original on 2019-01-31. Retrieved 2019-01-30.
  24. ↑ "CppCon 2018: Timur Doumler "Class template argument deduction in C++17"". YouTube. Archived from the original on 2019-08-21. Retrieved 2019-01-30.
  25. ↑ "N4640: Working Draft, Standard for Programming Language C++" (PDF). pp. 431–433. Archived (PDF) from the original on 2017-03-12. Retrieved 2017-03-09.
  26. ↑ "N4659: Working Draft, Standard for Programming Language C++" (PDF). §19.8. Archived (PDF) from the original on 2017-12-07. Retrieved 2017-03-24.
  27. ↑ "P0012R1: Make exception specifications be part of the type system, version 5". Archived from the original on 2017-09-12. Retrieved 2018-12-17.
  28. ↑ "P0018R3: Lambda Capture of *this by Value as [=,*this], version 3". Archived from the original on 2017-08-22. Retrieved 2021-06-21.
  29. ↑ "Adopt Library Fundamentals V1 TS Components for C++17 (R1)". Archived from the original on 2016-04-05. Retrieved 2016-03-23.
  30. ↑ "Current Status". Archived from the original on 2020-09-08.
  31. ↑ "std::basic_string_view - cppreference.com". en.cppreference.com. Archived from the original on 2016-06-17. Retrieved 2016-06-23.
  32. ↑ "N4259: Wording for std::uncaught_exceptions (Herb Sutter)" (PDF). Archived (PDF) from the original on 2014-11-29. Retrieved 2014-11-15.
  33. ↑ "N4279: Improved insertion interface for unique-key maps (Thomas Köppe)". Archived from the original on 2015-04-27. Retrieved 2014-11-15.
  34. 1 2 3 "New standard library papers adopted for C++17". Archived from the original on 2014-11-29. Retrieved 2014-11-15.
  35. ↑ "N4280: Non-member size() and more (Riccardo Marcangelo)" (PDF). Archived (PDF) from the original on 2015-03-09. Retrieved 2014-11-15.
  36. ↑ "N4284: Contiguous Iterators (Jens Maurer)". Archived from the original on 2014-11-29. Retrieved 2014-11-15.
  37. ↑ "Filesystem Library Proposal (Beman Dawes)". Archived from the original on 2016-07-20. Retrieved 2015-12-12.
  38. ↑ "The Parallelism TS Should be Standardized". Archived from the original on 2016-04-05. Retrieved 2016-03-23.
  39. ↑ "Mathematical Special Functions for C++17, v5" (PDF). Archived (PDF) from the original on 2016-04-05. Retrieved 2016-03-23.
  40. ↑ "N4659: Working Draft, Standard for Programming Language C++" (PDF). §23.7. Archived (PDF) from the original on 2017-12-07. Retrieved 2017-03-24.
  41. ↑ "A byte type definition" (PDF). Archived (PDF) from the original on 2017-03-25. Retrieved 2017-03-25.
  42. ↑ "N4659: Working Draft, Standard for Programming Language C++" (PDF). §23.15.8. Archived (PDF) from the original on 2017-12-07. Retrieved 2017-03-24.
  43. ↑ "PMR (Polymorphic Memory Resources) fully described -- Nico Josuttis". Archived from the original on 2021-08-28. Retrieved 2020-11-16.
  44. ↑ "N3981: Removing trigraphs??! (Richard Smith)". 2014-05-06. Archived from the original on 2018-07-09. Retrieved 2015-04-03.
  45. ↑ IBM comment on preparing for a Trigraph-adverse future in C++17 Archived 2018-09-11 at the Wayback Machine, IBM paper N4210, 2014-10-10. Authors: Michael Wong, Hubert Tong, Rajan Bhakta, Derek Inglis
  46. ↑ "N4190: Removing auto_ptr, random_shuffle(), And Old <functional> Stuff (Stephan T. Lavavej)". Archived from the original on 2017-10-20. Retrieved 2014-11-28.
  47. ↑ "C++ Keywords: register". Archived from the original on 2018-09-03. Retrieved 2018-09-03.
  48. ↑ "C++ Standards Support in GCC - GNU Project - Free Software Foundation (FSF)". gcc.gnu.org. Archived from the original on 2018-04-04. Retrieved 2018-04-03.
  49. ↑ "Clang - C++17, C++14, C++11 and C++98 Status". clang.llvm.org. Archived from the original on 2013-07-04. Retrieved 2018-06-26.
  50. ↑ corob-msft. "Visual C++ Language Conformance". docs.microsoft.com. Archived from the original on 2018-06-19. Retrieved 2018-06-19.
  51. ↑ "Announcing: MSVC Conforms to the C++ Standard". 7 May 2018. Archived from the original on 2018-08-26. Retrieved 2018-05-08.
  52. ↑ "Chapter 1. Status". gcc.gnu.org. Archived from the original on 2018-06-04. Retrieved 2018-06-19.
  53. ↑ "libc++ C++17 Status". llvm.org. Archived from the original on 2019-05-24. Retrieved 2019-05-24.
  54. ↑ "Announcing: MSVC Conforms to the C++ Standard". devblogs.microsoft.com. 7 May 2018. Archived from the original on 2018-08-26. Retrieved 2019-05-24.