C++17
{{short description|2017 edition of the C++ programming language standard}}
{{distinguish|C17 (C standard revision)}}
{{C++ language revisions}}
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.{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4661.html|title=N4661 Editors' Report -- Programming Languages -- C++|access-date=2017-03-21|date=21 March 2017|archive-date=2020-02-04|archive-url=https://web.archive.org/web/20200204081709/http://open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4661.html|url-status=live}}{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4660.pdf|title=ISO/IEC DIS 14882: Programming Languages — C++|url-status=dead|archiveurl=https://web.archive.org/web/20170325025026/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4660.pdf|archivedate=2017-03-25}} This DIS was unanimously approved, with only editorial comments,{{cite web|url=https://herbsutter.com/2017/09/06/c17-is-formally-approved/|author=Herb Sutter|title=C++17 is formally approved|date=6 September 2017|access-date=12 September 2017|archive-date=29 January 2020|archive-url=https://web.archive.org/web/20200129151205/https://herbsutter.com/2017/09/06/c17-is-formally-approved/|url-status=live}} and the final standard was published in December 2017.{{cite web|url=https://www.iso.org/standard/68564.html|title=ISO/IEC 14882:2017|access-date=2017-12-03|archive-date=2013-01-29|archive-url=https://web.archive.org/web/20130129110331/http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372|url-status=live}} Few changes were made to the C++ Standard Template Library, although some algorithms in the
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=
- Making the text message for {{code|2=cpp|1=static_assert}} optional{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3928.pdf|title=N3928: Extending static_assert, v2 (Walter E. Brown)|access-date=2015-04-03|archive-date=2015-08-11|archive-url=https://web.archive.org/web/20150811125019/http://open-std.org/JTC1/SC22/WG21/docs/papers/2014/n3928.pdf|url-status=live}}
- Allow {{code|2=cpp|1=typename}} (as an alternative to {{code|2=cpp|1=class}}) in a template template parameter{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4051.html|title=N4051: Allow typename in a template template parameter (Richard Smith)|access-date=2015-04-03|archive-date=2015-08-11|archive-url=https://web.archive.org/web/20150811124402/http://open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4051.html|url-status=live}}
- New rules for Type inference deduction from braced-init-list{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html|title=N3922: New Rules for auto deduction from braced-init-list (James Dennett)|access-date=2014-11-28|archive-date=2015-08-10|archive-url=https://web.archive.org/web/20150810183244/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html|url-status=live}}{{cite web|title=Updates to my trip report|url=http://isocpp.org/blog/2014/11/updates-to-my-trip-report|access-date=2014-11-28|archive-date=2015-03-19|archive-url=https://web.archive.org/web/20150319164316/https://isocpp.org/blog/2014/11/updates-to-my-trip-report|url-status=live}}
- Nested namespace definitions, e.g., {{code|2=cpp|1=namespace X::Y { … } }} instead of {{code|2=cpp|1=namespace X { namespace Y { … } } }}{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4230.html|title=N4230: Nested namespace definition (Robert Kawulak, Andrew Tomazos)|access-date=2014-11-28|archive-date=2015-08-03|archive-url=https://web.archive.org/web/20150803104044/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4230.html|url-status=live}}
- Allowing attributes for namespaces and enumerators{{cite web|url=http://isocpp.org/files/papers/n4266.html|title=N4266: Attributes for namespaces and enumerators (Richard Smith)|access-date=2014-11-15|archive-date=2016-03-06|archive-url=https://web.archive.org/web/20160306192948/https://isocpp.org/files/papers/n4266.html|url-status=live}}
- New standard attributes {{code|2=cpp|1=fallthrough}}, {{code|2=cpp|1=maybe_unused}} and {{code|2=cpp|1=nodiscard}}{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4640.pdf|title=N4640: Working Draft, Standard for Programming Language C++|pages=193–195|access-date=2017-03-09|archive-date=2017-03-12|archive-url=https://web.archive.org/web/20170312034609/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4640.pdf|url-status=live}}
- UTF-8 ({{code|2=cpp|1=u8}}) character literals{{cite web|url=http://isocpp.org/files/papers/n4267.html|title=N4267: Adding u8 character literals (Richard Smith)|access-date=2014-11-15|archive-date=2015-10-28|archive-url=https://web.archive.org/web/20151028205257/https://isocpp.org/files/papers/n4267.html|url-status=live}} (UTF-8 string literals have existed since C++11; C++17 adds the corresponding character literals for consistency, though as they are restricted to a single byte they can only store "Basic Latin" and C0 control codes, i.e. ASCII)
- Hexadecimal floating-point literals{{cite web|url=http://wg21.link/p0245r1|title=Hexadecimal floating literals for C++|author=Thomas Köppe|access-date=2017-07-16|archive-date=2022-09-21|archive-url=https://web.archive.org/web/20220921201419/https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0245r1.html|url-status=live}}{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf|title=N4659: Working Draft, Standard for Programming Language C++|at=§5.13.4|access-date=2017-03-24|archive-date=2017-12-07|archive-url=https://web.archive.org/web/20171207092618/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf|url-status=live}}
- Use of {{code|2=cpp|1=auto}} as the type for a non-type template parameter{{Cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0127r2.html|title=Declaring non-type template parameters with auto|date=2016-06-23|author1=James Touton|author2=Mike Spertus|access-date=2020-11-08|archive-date=2017-09-16|archive-url=https://web.archive.org/web/20170916093650/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0127r2.html|url-status=live}}
- Constant evaluation for all non-type template arguments{{cite web|url=http://isocpp.org/files/papers/n4268.html|title=N4268: Allow constant evaluation for all non-type template arguments (Richard Smith)|access-date=2014-11-15|archive-date=2016-03-12|archive-url=https://web.archive.org/web/20160312095610/https://isocpp.org/files/papers/n4268.html|url-status=live}}
- Fold expressions, for variadic templates{{cite web|url=http://isocpp.org/files/papers/n4295.html|title=N4295: Folding expressions (Andrew Sutton, Richard Smith)|access-date=2014-11-15|archive-date=2015-04-04|archive-url=https://web.archive.org/web/20150404075316/https://isocpp.org/files/papers/n4295.html|url-status=live}}
- A compile-time static {{code|2=cpp|1=if}} with the form {{code|2=cpp|1=if constexpr(expression)}}{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf|title=N4659: Working Draft, Standard for Programming Language C++|at=§9.4.1|access-date=2017-03-24|archive-date=2017-12-07|archive-url=https://web.archive.org/web/20171207092618/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf|url-status=live}}
- Structured binding declarations, allowing {{code|2=cpp|1=auto [a, b] = getTwoReturnValues();}}{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf|title=N4659: Working Draft, Standard for Programming Language C++|at=§11.5|access-date=2017-03-24|archive-date=2017-12-07|archive-url=https://web.archive.org/web/20171207092618/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf|url-status=live}}
- Initializers in {{code|2=cpp|1=if}} and {{code|2=cpp|1=switch}} statements{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0305r1.html|title=Selection statements with initializer|publisher=|access-date=2018-10-09|archive-date=2017-10-06|archive-url=https://web.archive.org/web/20171006024728/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0305r1.html|url-status=live}}
- copy-initialization and direct-initialization of objects of type {{code|2=cpp|1=T}} from prvalue expressions of type {{code|2=cpp|1=T}} (ignoring top-level cv-qualifiers) shall result in no copy or move constructors from the prvalue expression. See copy elision for more information.
- Some extensions on over-aligned memory allocation{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0035r4.html|title=Dynamic memory allocation for over-aligned data|access-date=2017-03-13|archive-date=2017-09-08|archive-url=https://web.archive.org/web/20170908201146/http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/p0035r4.html|url-status=live}}
- {{Visible anchor|Class template argument deduction}} (CTAD), introducing constructor deduction guides, e.g. allowing {{code|2=cpp|1=std::pair(5.0, false)}} instead of requiring explicit constructor arguments types {{code|2=cpp|1=std::pair
(5.0, false)}} or an additional helper template function {{code|2=cpp|1=std::make_pair(5.0, false)}}.{{cite web|url=https://en.cppreference.com/w/cpp/language/class_template_argument_deduction|title=Class template argument deduction|access-date=2019-01-30|archive-date=2019-01-31|archive-url=https://web.archive.org/web/20190131040627/https://en.cppreference.com/w/cpp/language/class_template_argument_deduction|url-status=live}}{{cite web|url=https://www.youtube.com/watch?v=UDs90b0yjjQ|title=CppCon 2018: Timur Doumler "Class template argument deduction in C++17"|website=YouTube|access-date=2019-01-30|archive-date=2019-08-21|archive-url=https://web.archive.org/web/20190821042758/https://www.youtube.com/watch?v=UDs90b0yjjQ&gl=US&hl=en|url-status=live}} - Inline variables, which allows the definition of variables in header files without violating the one definition rule. The rules are effectively the same as inline functions
- {{code|2=cpp|1=__has_include}}, allowing the availability of a header to be checked by preprocessor directives{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4640.pdf|title=N4640: Working Draft, Standard for Programming Language C++|pages=431–433|access-date=2017-03-09|archive-date=2017-03-12|archive-url=https://web.archive.org/web/20170312034609/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4640.pdf|url-status=live}}
- Value of {{code|2=cpp|1=__cplusplus}} changed to {{code|2=cpp|1=201703L}}{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf|title=N4659: Working Draft, Standard for Programming Language C++|at=§19.8|access-date=2017-03-24|archive-date=2017-12-07|archive-url=https://web.archive.org/web/20171207092618/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf|url-status=live}}
- Exception specifications were made part of the function type{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0012r1.html|title=P0012R1: Make exception specifications be part of the type system, version 5|access-date=2018-12-17|archive-date=2017-09-12|archive-url=https://web.archive.org/web/20170912064524/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0012r1.html|url-status=live}}
- Lambda expressions can capture "
*this
" by value{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0018r3.html|title=P0018R3: Lambda Capture of *this by Value as [=,*this], version 3|access-date=2021-06-21|archive-date=2017-08-22|archive-url=https://web.archive.org/web/20170822153946/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0018r3.html|url-status=live}}
=Library=
- Most of Library Fundamentals TS I, including:{{cite web|title=Adopt Library Fundamentals V1 TS Components for C++17 (R1)|url=https://isocpp.org/files/papers/p0220r1.html|access-date=2016-03-23|archive-date=2016-04-05|archive-url=https://web.archive.org/web/20160405060908/https://isocpp.org/files/papers/p0220r1.html|url-status=live}}{{Cite web|url=https://isocpp.org/std/status|title=Current Status|last=|first=|date=|website=|publisher=|access-date=|archive-date=2020-09-08|archive-url=https://web.archive.org/web/20200908083135/https://isocpp.org/std/status|url-status=live}}
std::string_view
, a read-only non-owning reference to a character sequence or string-slice{{Cite web|url=http://en.cppreference.com/w/cpp/string/basic_string_view|title=std::basic_string_view - cppreference.com|website=en.cppreference.com|access-date=2016-06-23|archive-date=2016-06-17|archive-url=https://web.archive.org/web/20160617220428/http://en.cppreference.com/w/cpp/string/basic_string_view|url-status=live}}std::optional
, for representing optional objects, a data type that may not always be returned by a given algorithm with support for non-returnstd::any
, for holding single values of any typestd::uncaught_exceptions
, as a replacement ofstd::uncaught_exception
in exception handling{{cite web|url=http://isocpp.org/files/papers/n4259.pdf|title=N4259: Wording for std::uncaught_exceptions (Herb Sutter)|access-date=2014-11-15|archive-date=2014-11-29|archive-url=https://web.archive.org/web/20141129022746/http://isocpp.org/files/papers/n4259.pdf|url-status=live}}{{cite web|title=New core language papers adopted for C++17|url=https://isocpp.org/blog/2014/11/new-papers-adopted-for-cpp17|access-date=2014-11-15|archive-date=2015-04-27|archive-url=https://web.archive.org/web/20150427234634/https://isocpp.org/blog/2014/11/new-papers-adopted-for-cpp17|url-status=live}}- New insertion functions
try_emplace
andinsert_or_assign
forstd::map
andstd::unordered_map
key-value associative data structures{{cite web|url=https://isocpp.org/files/papers/n4279.html|title=N4279: Improved insertion interface for unique-key maps (Thomas Köppe)|access-date=2014-11-15|archive-date=2015-04-27|archive-url=https://web.archive.org/web/20150427234153/https://isocpp.org/files/papers/n4279.html|url-status=live}}{{cite web|title=New standard library papers adopted for C++17|url=https://isocpp.org/blog/2014/11/new-standard-library-papers-adopted-for-cpp17|access-date=2014-11-15|archive-date=2014-11-29|archive-url=https://web.archive.org/web/20141129022647/https://isocpp.org/blog/2014/11/new-standard-library-papers-adopted-for-cpp17|url-status=live}} - Uniform container access:
std::size
,std::empty
andstd::data
{{cite web|title=N4280: Non-member size() and more (Riccardo Marcangelo)|url=https://isocpp.org/files/papers/n4280.pdf|access-date=2014-11-15|archive-date=2015-03-09|archive-url=https://web.archive.org/web/20150309065322/http://isocpp.org/files/papers/n4280.pdf|url-status=live}} - Definition of "contiguous iterators"{{cite web|title=N4284: Contiguous Iterators (Jens Maurer)|url=https://isocpp.org/files/papers/n4284.html|access-date=2014-11-15|archive-date=2014-11-29|archive-url=https://web.archive.org/web/20141129022748/https://isocpp.org/files/papers/n4284.html|url-status=live}}
- A file system library based on
boost::filesystem
{{cite web|title=Filesystem Library Proposal (Beman Dawes)|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3505.html|access-date=2015-12-12|archive-date=2016-07-20|archive-url=https://web.archive.org/web/20160720075346/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3505.html|url-status=live}} - Parallel versions of STL algorithms{{cite web|title=The Parallelism TS Should be Standardized|url=https://isocpp.org/files/papers/P0024R2.html|access-date=2016-03-23|archive-date=2016-04-05|archive-url=https://web.archive.org/web/20160405100743/https://isocpp.org/files/papers/P0024R2.html|url-status=live}}
- Additional mathematical special functions, including elliptic integrals and Bessel functions{{cite web|title=Mathematical Special Functions for C++17, v5|url=https://isocpp.org/files/papers/P0226R1.pdf|access-date=2016-03-23|archive-date=2016-04-05|archive-url=https://web.archive.org/web/20160405090715/https://isocpp.org/files/papers/P0226R1.pdf|url-status=live}}
std::variant
, a tagged union container{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf|title=N4659: Working Draft, Standard for Programming Language C++|at=§23.7|access-date=2017-03-24|archive-date=2017-12-07|archive-url=https://web.archive.org/web/20171207092618/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf|url-status=live}}std::byte
, allowing char to be replaced for data types intending to model a byte of data as a byte rather than a character{{cite web|url=http://open-std.org/JTC1/SC22/WG21/docs/papers/2017/p0298r3.pdf|title=A byte type definition|access-date=2017-03-25|archive-date=2017-03-25|archive-url=https://web.archive.org/web/20170325202328/http://open-std.org/JTC1/SC22/WG21/docs/papers/2017/p0298r3.pdf|url-status=live}}- Logical operator traits:
std::conjunction
,std::disjunction
andstd::negation
{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf|title=N4659: Working Draft, Standard for Programming Language C++|at=§23.15.8|access-date=2017-03-24|archive-date=2017-12-07|archive-url=https://web.archive.org/web/20171207092618/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf|url-status=live}}
header, for polymorphic memory resources{{cite web|url=https://isocpp.org/blog/2018/10/pmr-polymorphic-memory-resources|title=PMR (Polymorphic Memory Resources) fully described -- Nico Josuttis|access-date=2020-11-16|archive-date=2021-08-28|archive-url=https://web.archive.org/web/20210828223659/https://isocpp.org/blog/2018/10/pmr-polymorphic-memory-resources|url-status=live}}
Removed features
This revision of C++ not only added new features but also removed a few.
- Trigraphs were removed.{{cite web|title=N3981: Removing trigraphs??! (Richard Smith)|url=http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n3981.html|date=2014-05-06|access-date=2015-04-03|archive-date=2018-07-09|archive-url=https://web.archive.org/web/20180709123422/http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n3981.html|url-status=live}}[http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4210.pdf IBM comment on preparing for a Trigraph-adverse future in C++17] {{Webarchive|url=https://web.archive.org/web/20180911053619/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4210.pdf |date=2018-09-11 }}, IBM paper N4210, 2014-10-10. Authors: Michael Wong, Hubert Tong, Rajan Bhakta, Derek Inglis
- Some deprecated types and functions were removed from the standard library, including
std::auto_ptr
,std::random_shuffle
, and old function adaptors.{{cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4190.htm|title=N4190: Removing auto_ptr, random_shuffle(), And Old <functional> Stuff (Stephan T. Lavavej)|access-date=2014-11-28|archive-date=2017-10-20|archive-url=https://web.archive.org/web/20171020150616/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4190.htm|url-status=live}} These were superseded in C++11 by improved facilities such asstd::unique_ptr
,std::shuffle
,std::bind
, and lambdas. - The (formerly deprecated) use of the keyword {{code|2=cpp|1=register}} as a storage class specifier was removed.{{cite web|url=https://en.cppreference.com/w/cpp/keyword/register|title=C++ Keywords: register|access-date=2018-09-03|archive-date=2018-09-03|archive-url=https://web.archive.org/web/20180903114706/https://en.cppreference.com/w/cpp/keyword/register|url-status=live}} This keyword is still reserved but now unused.
Compiler support
- GCC has had complete support for C++17 language features since version 8.{{cite web|url=https://gcc.gnu.org/projects/cxx-status.html|title=C++ Standards Support in GCC - GNU Project - Free Software Foundation (FSF)|website=gcc.gnu.org|access-date=2018-04-03|archive-date=2018-04-04|archive-url=https://web.archive.org/web/20180404073049/https://gcc.gnu.org/projects/cxx-status.html|url-status=live}}
- Clang 5 and later supports all C++17 language features.{{cite web|url=https://clang.llvm.org/cxx_status.html|title=Clang - C++17, C++14, C++11 and C++98 Status|website=clang.llvm.org|access-date=2018-06-26|archive-date=2013-07-04|archive-url=https://web.archive.org/web/20130704124639/http://clang.llvm.org/cxx_status.html|url-status=live}}
- Visual Studio 2017 15.8 (MSVC 19.15) and later supports all C++17 language features.{{cite web|url=https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance|title=Visual C++ Language Conformance|last=corob-msft|website=docs.microsoft.com|access-date=2018-06-19|archive-date=2018-06-19|archive-url=https://web.archive.org/web/20180619113256/https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance|url-status=live}}{{cite web|url=https://blogs.msdn.microsoft.com/vcblog/2018/05/07/announcing-msvc-conforms-to-the-c-standard/|title=Announcing: MSVC Conforms to the C++ Standard|date=7 May 2018 |publisher=|access-date=2018-05-08|archive-date=2018-08-26|archive-url=https://web.archive.org/web/20180826095016/https://blogs.msdn.microsoft.com/vcblog/2018/05/07/announcing-msvc-conforms-to-the-c-standard/|url-status=live}}
Library support
- libstdc++ since version 9.1 has complete support for C++17 (8.1 without Parallelism TS and referring to C99 instead of C11) {{cite web|url=https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html|title=Chapter 1. Status|website=gcc.gnu.org|access-date=2018-06-19|archive-date=2018-06-04|archive-url=https://web.archive.org/web/20180604111405/http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html|url-status=live}}
- libc++ as of version 9 has partial support for C++17, with the remainder "in progress" {{cite web|url=http://libcxx.llvm.org/cxx1z_status.html|title=libc++ C++17 Status|website=llvm.org|access-date=2019-05-24|archive-date=2019-05-24|archive-url=https://web.archive.org/web/20190524173505/http://libcxx.llvm.org/cxx1z_status.html|url-status=live}}
- Visual Studio 2017 15.8 (MSVC 19.15) Standard Library and later supports all C++17 library features except for "Elementary String Conversions" and referring to C99 instead of C11. "Elementary String Conversions" is added in Visual Studio 2019 16.4{{cite web|url=https://devblogs.microsoft.com/cppblog/announcing-msvc-conforms-to-the-c-standard/|title=Announcing: MSVC Conforms to the C++ Standard|website=devblogs.microsoft.com|date=7 May 2018 |access-date=2019-05-24|archive-date=2018-08-26|archive-url=https://web.archive.org/web/20180826095016/https://blogs.msdn.microsoft.com/vcblog/2018/05/07/announcing-msvc-conforms-to-the-c-standard/|url-status=live}}
See also
References
{{Reflist}}
{{C++ProLang}}
{{ISO standards}}
Category:C++ programming language family
Category:Programming language standards