-
Notifications
You must be signed in to change notification settings - Fork 1.6k
VS 2019 Changelog
Stephan T. Lavavej edited this page Mar 4, 2026
·
23 revisions
For newer releases, see the current Changelog.
- VS 2019 16.11.14
- VS 2019 16.11 - see the VS 2019 Release Notes
- VS 2019 16.10
- VS 2019 16.9
- VS 2019 16.8
- VS 2019 16.7
- VS 2019 16.6
- VS 2019 16.5
C++20 features generally require the /std:c++latest compiler option.
- Backported all C++20 Defect Reports from the VS 2022 release series where they were originally implemented, and enabled all remaining C++20 features under
/std:c++20. For more info, read MSVC's STL Completes/std:c++20.
- Implemented our plan for a partial C++20 ABI freeze (see #1814). Effectively this means that
<format>, the formatting parts of<chrono>(which rely on<format>), and the range factories and range adaptors from<ranges>(basically everything that needs theviewconcept) will be available only under/std:c++latest. We will make those final C++20 features available under/std:c++20only after reaching agreement with WG21 that no further ABI-breaking changes will be necessary. #1929 - Fixed bugs:
- Fixed a major regression in the
_ITERATOR_DEBUG_LEVEL == 2machinery, where a multithreaded program in debug mode could crash when one thread is modifying a container and another thread is destroying iterators. #2060- This regression affected all Standard modes (C++14/17/20/23) and was introduced by #1546 in VS 2019 16.10.
- Fixed in both VS 2019 16.11.4 and VS 2022 17.0.
- Fixed a major regression in the
- The STL is C++20 feature complete.
- Merged C++20 features:
-
P0053R7 #1564
<syncstream>-
P0753R2
osyncstreamManipulators
-
P0753R2
-
P0355R7
<chrono>Calendars And Time Zones:- #323 implemented calendars.
- #1789 implemented new clocks, leap seconds, time zones, and parsing.
-
#1870 implemented
<chrono>'sformat()support (viaformatterspecializations) and remainingoperator<<()overloads, completing this feature. - While the STL generally provides all features on all supported versions of Windows, leap seconds and time zones (which change over time) require OS support that was added to Windows 10. Specifically, updating the leap second database requires Windows 10 version 1809 or later, and time zones require
icu.dllwhich is provided by Windows 10 version 1903/19H1 or later. This applies to both client and server OSes; note that Windows Server 2019 is based on Windows 10 version 1809.
-
P0408R7 #919 Efficient Access To
basic_stringbuf's Buffer -
P0466R5 #1575 Layout-Compatibility And Pointer-Interconvertibility Traits
- Initially supported for MSVC only; will be supported for Clang after LLVM-48860 is resolved.
- P0475R1 #1668 Guaranteed Copy Elision For Piecewise Construction
- P0591R4 #1668 Utility Functions For Uses-Allocator Construction
-
P0608R3 #1629 Improving
variant's Converting Constructor/Assignment -
P0645R10 #1821 #1834 #1803 #1853 #1862 #1867 #1851 #1875
<format>Text Formatting -
P0784R7 #1369 #1546 Library Support For More
constexprContainers - P0896R4 Ranges, completed with the final PRs:
-
P0980R1 #1502
constexprstd::string- Initially supported for MSVC only; will be supported for Clang after LLVM-48606 is resolved.
-
P1004R2 #1407 #1690 #1698
constexprstd::vector- Initially supported for MSVC only; see note for
constexprstd::string.
- Initially supported for MSVC only; see note for
-
P1208R6 #664
<source_location>- Initially supported for MSVC only; will be supported for Clang after it implements
consteval(see Clang's C++20 status).
- Initially supported for MSVC only; will be supported for Clang after it implements
-
P1502R1 #1567 #1692 Standard Library Header Units
- Initially supported for MSVC only; will be supported for Clang after it implements C++20 modules (see Clang's C++20 status).
-
P1614R2 #1602 #1678 Adding Spaceship
<=>To The Library
-
P0053R7 #1564
- Merged LWG issue resolutions:
- Fixed bugs:
- Fixed regex character class behavior with
regex::icase. #1503 - Fixed compiler errors when calling
std::equal()with user-defined contiguous iterators. #1527 - Fixed
boolalphaextraction to be case-sensitive again. #1543 #1570 (This was a regression in VS 2019 16.8 caused by #1168.) - Fixed a compiler error when calling
std::fill()withvolatile byte*. #1557 - Fixed
ranges::uniqueto correctly handle inputs that are already unique. #1561 - Fixed compiler errors, specific to Clang targeting ARM64, in
<atomic>and<bit>, related to compiler intrinsics. #1505 - Fixed C++20 mode to remove old
std::allocatormembers that were deprecated in C++17. (As usual, fine-grained and coarse-grained escape hatches are available for this removal.) #1585 - Fixed an inaccurate approximation in
binomial_distribution. #1531 - Fixed incorrect
min/maxvalues for several<random>distributions. #1601 - Fixed incorrect behavior in
gamma_distribution::param_type::operator==. #1601 - Fixed a regression in VS 2019 16.6 caused by #423, where
__declspec(dllexport)ing a class derived fromunordered_maporunordered_setwould fail to compile with astatic_assert. #1639 - Fixed compiler errors in
ranges::uninitialized_copy,ranges::uninitialized_copy_n,ranges::uninitialized_move, andranges::uninitialized_move_nwhen attempting to usememcpyfor efficiency. #1548 - Fixed incorrect behavior in
ranges::uninitialized_value_constructandranges::uninitialized_value_construct_nwhen attempting to usememsetfor efficiency. #1700 - Fixed
year_month_day_last::day()to return a valid-but-unspecified value for!ok()dates, as required by the Standard. #1663 - Fixed a regression in VS 2019 16.7 caused by #309, where
<memory>would fail to compile with/std:c++latest/Zc:alignedNew-. #1689 - Fixed incorrect behavior in
get_time(). #1620- Format specifications without delimiters are now correctly handled, even when a field is all-zero. For example,
"19700405T000006"can now be parsed with"%Y%m%dT%H%M%S". - Literal matching (outside of
'%'conversion specifications) is now case-insensitive. - If the stream ends during literal matching,
ios_base::eofbit | ios_base::failbitis now set. - Incomplete conversion specifications (e.g.
'%'appearing as the last character of a format specification) now result inios_base::failbitinstead of literal matching. - The seconds field now permits
60to handle leap seconds.
- Format specifications without delimiters are now correctly handled, even when a field is all-zero. For example,
- Fixed compiler errors in
ranges::uninitialized_copyandranges::uninitialized_movewhen attempting to usememcpyfor efficiency. #1713 - Fixed compiler errors where the
ranges::uninitialized_meow()algorithms assumed that<algorithm>was included; now they can be called after including only<memory>. #1832 - Fixed an off-by-default truncation warning in
<complex>(warning C5219: implicit conversion from'const int'to'const float', possible loss of data). #1722 - Fixed compiler errors in
make_sharedandallocate_sharedwithnoexcept(false)destructors. #1736 - Fixed compiler errors in an advanced scenario for Standard Library Header Units: using the IDE's build system to perform "dependency scanning" in addition to automatic translation of
#includetoimport. #1781 - Fixed a regression in VS 2019 16.9 caused by #1336, where
<cmath>'s usage of new compiler intrinsics inceil,copysign,floor,round, andtruncwould fail to compile with CUDA and the Intel C++ Compiler. #1886- Also backported to VS 2019 16.9.7.
- Will appear in VS 2019 16.11 Preview 2 (but not 16.11 Preview 1).
- Note: The Intel C++ Compiler remains unsupported by MSVC.
- Fixed regex character class behavior with
- Improved performance:
-
countr_zero()andcountr_one()in<bit>are now faster foruint8_tanduint16_t. #1540 -
atomiclocks on x86/x64 now use the_mm_pauseintrinsic with increasing back-off. #1146 - Slightly optimized
<charconv>'s integerto_chars()for the bases 3, 5, 6, 7, and 9. #1622 - Significantly optimized
<chrono>'s conversions betweenyear_month_dayandsys_days. #1634 #1646 - Extended
stdalgorithm optimizations tostd::rangesalgorithms and generalized those optimizations from pointers to contiguous iterators. #1433 #1772
-
- Enhanced behavior:
- Added
header-units.json, a file that will tell the compiler which headers are eligible to be automatically treated as header units at the user's request. (That is, there will be a compiler option allowing#include <vector>to be treated asimport <vector>;without changing the source code.) #1545 - Added
[[nodiscard]]to several member functions in<hash_map>and<hash_set>, even though these non-Standard headers are deprecated and will be removed soon. #1574 - Added
static_assert(is_clock_v<Clock>);as required by N4878 [thread.req.paramname]/1. #1687 -
<coroutine>is now supported in C++14 mode and C++17 mode; the new/await:strictcompiler option activates this "downlevel" support. #1730-
<coroutine>remains supported in C++20 mode with no additional compiler options.
-
- Added the STL's visualizers to this repo, see
stl/debugger/STL.natvis. #1720 - Generalized
<complex>'s 80-bitlong doubledetection logic to work with Clang in addition to the Intel C++ Compiler. #1728-
Note: 80-bit
long doubleremains unsupported by MSVC.
-
Note: 80-bit
- Added
- Improved test coverage:
- Added test coverage for CUDA 10.1 Update 2. #1519 #1539
- Accelerated the test for P1502R1 Standard Library Header Units by building the header units in parallel, using
/MP. #1529 - The test harness now builds all tests for ARM and ARM64. #1505
- This is build-only; the goal of running tests on ARM and ARM64 is tracked by #820.
- Clang is supported for ARM64 only, not ARM.
- Updated the
libcxxtest suite. #1594 - Added more test coverage for the
default_initializableconcept. #1604
- Code cleanups:
- Removed compiler bug workarounds. #1521 #1711 #1841
- Improved formatting with clang-format 11. #1521
- CUDA 10.1 Update 2 is now required, allowing the STL to unconditionally use
if constexprfor compiler throughput and code clarity. #1544 - Updated
<charconv>'s product/test code to be more compatible with libc++. #1670 - Rearranged
[[nodiscard]]attributes to appear before__declspecspecifications for functions (otherwise,[[nodiscard]]is ignored). #1703 - Updated the Standard Library Header Units test now that the compiler supports attributes in modules. #1747
- Suppressed a harmless warning in test code after MSVC implemented
constinit. #1611 - Renamed a few internal identifiers to be
_Ugly, following the Standard's strict requirements. #1743 - The STL now consistently uses SFINAE instead of concepts when
__cpp_lib_conceptsisn't defined. #1749 - Removed comments that were citing proposed resolutions for LWG issues, now that those issues have been officially resolved by the February 2021 virtual plenary meeting. #1686
- Fixed mysterious LWG issue citations in
<optional>. #1788
- Infrastructure improvements:
- Updated dependencies. #1521 #1577 #1636 #1711
- Updated build compiler to VS 2019 16.10 Preview 1 (now required).
- Updated Clang to 11.0.0 (now required).
- Updated vcpkg for Boost 1.75.0 (now required).
- Updated CMake to 3.19 (now required).
- Updated Ninja to 1.10.2.
- Updated Python to 3.9.2.
- Accelerated the CI with partial clones, shallow clones, and sparse checkouts. #1513 #1605
- Fixed reliability issues in the
parallelizetool, which is used to runclang-formaton all files in the codebase. #1632 - Skipped a flaky test in the legacy
tr1test suite. #1697 - We now use GitHub Actions to update the Status Chart every day. #1769
- The test harness now runs the Standard Library Header Units test in a "parallelism group", which should make the CI system more reliable. #1776
- Updated dependencies. #1521 #1577 #1636 #1711
- Updated
_MSVC_STL_UPDATE. #1535 #1552 #1626 #1708 #1801
- Merged C++20 features:
-
P0339R6 #1311
polymorphic_allocator<> -
P0660R10 #1196
<stop_token>Andjthread -
P0768R1 #1370 Library Support For The Spaceship Comparison Operator
<=>- This feature was mostly implemented in VS 2019 16.0; it's now complete with the addition of the spaceship customization point objects
strong_order,weak_order,partial_order,compare_strong_order_fallback,compare_weak_order_fallback, andcompare_partial_order_fallback.
- This feature was mostly implemented in VS 2019 16.0; it's now complete with the addition of the spaceship customization point objects
-
P1007R3 #1306
assume_aligned() - P1020R1 #1315 Smart Pointer Creation With Default Initialization
-
P1771R1 #1495 #1514
[[nodiscard]]For Constructors
-
P0339R6 #1311
- Merged partial C++20 features:
-
P0355R7
<chrono>Calendars And Time Zones:-
#1341
operator<<(basic_ostream&, const duration&)
-
#1341
-
P0896R4 Ranges:
-
#1092 #1265 #1268
common_iterator -
#1271
views::takeandviews::dropnow handlebasic_string_viewas specified in P1739R4. -
#1313
ranges::construct_atandranges::destroy_at -
#1164 algorithms
ranges::uninitialized_default_construct,ranges::uninitialized_default_construct_n,ranges::uninitialized_value_construct,ranges::uninitialized_value_construct_n,ranges::uninitialized_fill,ranges::uninitialized_fill_n,ranges::uninitialized_copy,ranges::uninitialized_copy_n,ranges::uninitialized_move_n -
#1281 Changes to the stream iterators (
istream_iterator,ostream_iterator,istreambuf_iterator, andostreambuf_iterator) to model the C++20 iterator concepts -
#1366 view
ranges::drop_while_view -
#1406 view
ranges::elements_view -
#1334 view
ranges::istream_view -
#1372 view
ranges::take_while_view -
#1305
views::common -
#1375
views::counted
-
#1092 #1265 #1268
- P1502R1 Standard Library Header Units:
-
P0355R7
- Merged LWG issue resolutions:
-
LWG-3036 #1455
polymorphic_allocator::destroyis extraneous -
LWG-3117 #1493 Missing
packaged_taskdeduction guides -
LWG-3170 #1501
is_always_equaladded tostd::allocatormakes the standard library treat derived types as always equal -
LWG-3211 #1460
std::tuple<>should be trivially constructible -
LWG-3448 #1458
transform_view'ssentinel<false>not comparable withiterator<true> -
LWG-3460 #1452 Unimplementable
noop_coroutine_handleguarantees -
LWG-3464 #1483
istream::gcount()can overflow
-
LWG-3036 #1455
- Fixed bugs:
- Fixed the
invocable_rfamily of type traits to handle C++17 deferred temporary materialization. #1282 - Fixed a compiler error in
atomic_ref<[u]int8_t>::operator--(int). #1303 - Removed non-Standard implicitly converting constructors from
complex. #1294 - Enabled
constexprdestruction ofmemory_resource. #1314 -
std::filesystem::create_directories()now throws an exception (or fails with anerror_code) when called with an emptypath. #1285 - Fixed compiler errors (with clang-tidy and IntelliSense-in-Clang-mode) caused by
intrin0.hincludingintrin.h, which no longer happens. #1300 - Fixed undefined behavior and incorrect results in
geometric_distribution,poisson_distribution,binomial_distribution, andgamma_distribution. #1159 - Fixed incorrect results (infinity and NaN) in
normal_distribution,lognormal_distribution,fisher_f_distribution, andstudent_t_distribution. #1228 - Fixed
bind_front()to determine its return type from the decayed types of its arguments. #1293 - Fixed
pow(complex, arithmetic)to strictly follow the Standard's rules and return correct results. #1299 - Fixed
_Node_handle- the internal class template that reifies the Standard'snode-handlefamily of exposition-only types - to destroy contained values with an allocator rebound to the value type instead of to the type of the node. #1310 - Fixed overflow when converting extreme relative times (like
duration::max()) to absolute times incondition_variable_any::wait_for(),condition_variable::wait_for(),recursive_timed_mutex::try_lock_for(),shared_timed_mutex::try_lock_for(),shared_timed_mutex::try_lock_shared_for(),this_thread::sleep_for(), andtimed_mutex::try_lock_for(). #1371 - Fixed a compiler error when compiling
<experimental/generator>in/kernelmode. #1373 - Fixed
std::atomic_init; C++20 deprecated it (which we previously implemented) and changed its effects to be equivalent to a relaxed store (which we previously missed). #1090 - Fixed
get_time()to correctly handle format specifications without delimiters; for example,"20201029"can now be parsed with"%Y%m%d". #1280- This fix was incomplete; it was completed by #1620 in VS 2019 16.10.
- Fixed the ordered associative containers (
map,multimap,set,multiset) so that their move constructors and move assignment operators don't attempt to swap their comparators (which could fail to compile, especially for lambdas which aren't assignable). #1357 - Fixed a crash when a user-defined class, deriving from
streambuf, threw an exception from its constructor. #1358 - Fixed two lines in ranges machinery that mistakenly said
noexcept(noexcept(is_nothrow_v))(which is alwaysnoexcept(true)). Now they saynoexcept(is_nothrow_v)as intended. #1417 - Marked
hash<coroutine_handle<>>::operator()asconst, required by the Standard. #1423 - Fixed several issues in
complexsqrt()andlog(): #935- Fixed
sqrt()overflow for huge inputs. - Fixed
sqrt()inaccuracy for tiny inputs, due to internal underflow. - Fixed
log()inaccuracy for tiny inputs, due to internal underflow. - Improved accuracy of
log()when |z| ~= 1. - Fixed
log(complex<float>{1, 0})for certain combinations of compile-time and run-time settings; now it correctly returns0. - These correctness fixes have a moderate performance cost, partially mitigated by using hardware FMA when available on x86/x64/arm64.
- Fixed
- Fixed an AddressSanitizer
new-delete-type-mismatchissue invalarray. #1496 - Fixed linker errors on ARM and ARM64 when using atomic waits. #1507
- Fixed the exception specification for
basic_string_view's (iterator, sentinel) constructor. #1510 - Fixed
regex_traits::transform()to accept arbitrary forward iterators instead of requiring raw pointers. #1494 - Fixed a
static_assertthat was preventingatomic_ref<const T>from compiling. #1500 - Fixed a compiler error when compiling
<atomic>in C++20 mode with Clang targeting ARM64. #1509
- Fixed the
- Improved performance:
- Removed unused code for Windows XP (and Server 2003) support, slightly improving runtime performance and decreasing the size of the STL's DLL by 3%. #1194 #1325 #1397
- Optimized
<charconv>from_chars()by simplifying how it assembles floating-point values, and by using the branchless rounding technique that was originally invented forhexprecisionto_chars(). #1220 - Changed
vector's move constructor to be more optimizer-friendly. #1330 - Optimized the
fillfamily of algorithms (includingfill_n, theuninitialized_forms, and theranges::forms) to usememsetwhen setting scalars to all-bits-zero. #1273 - Used new compiler intrinsics in
<cmath>'sfloatandlong doubleoverloads ofceil,copysign,floor,round, andtrunc. #1336 - The range adaptor closure objects for
views::filterandviews::transformnow properly move from their stashed function objects when possible. #1410 - The spaceship customization point objects
strong_orderandweak_ordernow compare floating-point values without branching on the sign bit. #1475
- Enhanced behavior:
- Changed
_Execute_once(), an internal helper function, to be compatible with XFG, an enhanced version of the Control Flow Guard feature. #1318 #1356 - Added checks to
optional::operator*andoptional::operator->that fire when called on an emptyoptionalwhen_CONTAINER_DEBUG_LEVEL > 0(which is implied by_ITERATOR_DEBUG_LEVEL != 0). #1362 - Header improvements: #1405
-
<tuple>no longer includes<new>. - Changed most (but not all) C wrapper headers to be "core headers".
-
- Function objects for operators (
less,equal_to,greater,plus, etc., and the recently-addedcompare_three_way) now emit[[nodiscard]]warnings. #1474
- Changed
- Improved throughput:
- Replaced one use of tag dispatch with
if constexpr, and changed several uses of type trait structs to variable templates (which the MSVC compiler recognizes and efficiently handles). #1413 - Added
::std::qualification to certain names, improving throughput for extremely largetuples (noticeable with 50+ elements). #1490
- Replaced one use of tag dispatch with
- Improved documentation:
- Added
llvm-projectand the--progressoption to the README's instructions for the initial submodule sync. This takes longer (a lot longer), but it simplifies the testing instructions later. #1441
- Added
- Improved test coverage:
- Added more
<charconv>to_chars()test cases. #1278 - Added tests for
get_time()being called with a format specification that's longer than the stream's contents. #1326 - Updated the
libcxxtest suite. #1090 - Fixed the range adaptor tests to properly test
constrvalues. #1393 - Overhauled the test harness, improving its performance for both manual and CI runs. (For example, on one machine, testing time decreased from 75 minutes to 60 minutes.) #1394
- Added
/analyze:autolog-to/analyze:onlytest configurations; together, these compiler options run code analysis without producing an object file (/analyze:only) and without writing detailed analyzer results to an XML file (/analyze:autolog-), as we're simply looking for any warnings from code analysis. #1434 - Skipped parts of
tests/std/tests/VSO_0226079_mutexthat could intermittently fail due tosystem_clocktime adjustments on virtual machines. #1473
- Added more
- Code cleanups:
- Removed compiler bug workarounds. #1291 #1327 #1451
- Removed unused
#includedirectives fromstl/srcfiles, and changed inclusions from<meow.h>to<cmeow>. #1270 - Removed unnecessary macros and a compiler bug workaround. #1307
- Removed unnecessary code in
ranges::uninitialized_default_construct_n. #1377 - Changed test code to consistently use
unsigned intinstead ofunsigned. #1390 - Moved helper structs in separately compiled code into unnamed namespaces. #1398
- Changed test code to construct
initializer_listwith Standard code, instead of our internal constructor. #1400 - Changed test code to always
remove_cvref_tthe argument toenable_borrowed_range(because the library doesn't allow user specializations for cv-qualified types or reference types). #1415 - Renamed internal
<ranges>machinery to_Category_base, which avoids shadowing the internal_Iterator_baseused throughout the STL. #1420 - Improved the readability of the
<ranges>"expression-equivalent" machinery by extracting aconstexpr"strategy" variable. #1426 - Removed comments that were citing proposed resolutions for LWG issues, now that those issues have been officially resolved by the November 2020 virtual plenary meeting. #1456
- Unified internal machinery for floating-point type traits. #1442
- Fixed a comment that was mentioning a non-existent parameter. #1476
- Infrastructure improvements:
- Updated
_MSVC_STL_UPDATE. #1272 #1340 #1439
- Merged C++20 features:
-
P0019R8 #843
atomic_ref - P0528R3 #1029 Atomic Compare-And-Exchange With Padding Bits (for MSVC; Clang support is pending compiler intrinsics, see LLVM-46685)
- Completed P0553R4 and P0556R3 #795 by adding MSVC support for the functions in
<bit>that were previously only supported when compiling with Clang (bit_ceil,bit_floor,bit_width,countl_one,countl_zero,countr_one,countr_zero,has_single_bit,popcount,rotl, androtr). - Completed P0811R3 #1048
midpoint(),lerp()by addingconstexprsupport and improving handling of infinite arguments. - P0912R5 #894 #961 #1204 Library Support For Coroutines
-
P1001R2 #1111
execution::unseq -
P1032R1 #491 #861 Miscellaneous
constexpr -
P1065R2 #703
constexprINVOKE - Completed P1135R6 The C++20 Synchronization Library:
-
P0019R8 #843
- Merged partial C++20 features:
-
P0896R4 Ranges:
-
#888 algorithm
ranges::move -
#892 algorithm
ranges::is_permutation -
#896 algorithm
ranges::search -
#904 algorithms
ranges::fillandranges::fill_n -
#905 algorithms
ranges::generateandranges::generate_n -
#914 algorithm
ranges::search_n -
#915 algorithms
ranges::is_sortedandranges::is_sorted_until -
#916 algorithms
ranges::min,ranges::max,ranges::minmax,ranges::clamp,ranges::min_element,ranges::max_element, andranges::minmax_element -
#917 algorithms
ranges::lower_bound,ranges::upper_bound,ranges::equal_range, andranges::binary_search -
#918 algorithm
ranges::swap_ranges -
#925 concepts
std::permutableandstd::sortable -
#930 algorithms
ranges::is_heap,ranges::is_heap_until,ranges::make_heap,ranges::push_heap,ranges::pop_heap, andranges::sort_heap -
#941 algorithm
ranges::transform -
#976 algorithms
ranges::is_partitioned,ranges::partition,ranges::partition_copy, andranges::partition_point -
#983 algorithms
ranges::replace,ranges::replace_copy, andranges::replace_copy_if -
#984 algorithm
ranges::replace_if -
#1005 algorithms
ranges::remove,ranges::remove_if,ranges::remove_copy, andranges::remove_copy_if -
#1026 algorithm
ranges::copy_backward -
#1028 algorithm
ranges::reverse(vectorized likestd::reverse) -
#1039 algorithms
ranges::uniqueandranges::unique_copy -
#1044 Concept
mergeable, and algorithmsranges::includes,ranges::set_difference,ranges::set_intersection,ranges::set_symmetric_difference, andranges::set_union -
#1052 algorithms
ranges::sampleandranges::shuffle -
#1053 algorithm
ranges::move_backward -
#1063 algorithm
ranges::nth_element -
#1073 algorithms
ranges::rotateandranges::rotate_copy -
#1076 range access function
ranges::ssize -
#1081 algorithm
ranges::lexicographical_compare -
#1083 iterator adaptor
counted_iterator -
#1095 algorithm
ranges::reverse_copy(vectorized likestd::reverse_copy) -
#1099 algorithms
ranges::next_permutationandranges::prev_permutation -
#1101 algorithm
ranges::merge -
#1127 algorithm
ranges::sort -
#1132 view
ranges::ref_view -
#1137 algorithm
ranges::uninitialized_move -
#1201 range factories
views::emptyandviews::single -
#1229 range adaptors
views::allandviews::reverse -
#1231 algorithms
ranges::partial_sortandranges::partial_sort_copy -
#1245 P1391R4 Range Constructor For
string_view -
#1252 range adaptor
views::filter -
#1253 range adaptors
views::dropandviews::take -
#1258 range adaptor
views::transform
-
#888 algorithm
-
P0896R4 Ranges:
- Merged LWG issue resolutions:
- Fixed bugs:
-
variantno longer emits warnings about narrowing/sign conversions when determining which alternative should be activated for a given initializer. (Warnings can still be emitted by the chosen initialization; that's intentional and desirable.) #858 -
condition_variable_anynow correctly unlocks-and-relocks the lock argument to timed wait functions when given a non-positive relative timeout or absolute time in the past. #685 -
std::powis now templated to handle integral and floating-point types as required by C++11 and later. For example,std::pow(float, int)previously returnedfloatand now returnsdouble. #903 - Removed a bogus overload of
ranges::copy_nthat wasn't supposed to exist and wouldn't have compiled. #957 -
filesystem_errornow transcodes wide characters with no equivalent in the current locale to replacement characters instead of failing and throwingsystem error. #1010 - Fixed
0 <=> partial_ordering::unorderedto return the correct value, and improved<compare>codegen. #1049 -
discrete_distributionno longer yields invalid results when its parameters sum very close to, but not equal to 1. #1025 -
move_iterator::currentis no longer inadvertently aprotecteddata member - it has become properlyprivateand been renamed. #1080 - Range algorithms no longer mishandle pointer-to-member predicates and projections when they are larger than
void*. #1091 - The
slice_array,gslice_array,mask_array, andindirect_arrayhelpers defined in<valarray>now have proper copy constructors and copy assignment operators. #988 - Fixed a bug in
ranges::iter_swapthat would cause it to sometimes drop one of the "swapped" values on the floor. #1072 -
weak_ptrconversions now preserve control blocks for expired objects. #1104 - Fixed
<bit>'scountl_zeroto correctly use thebsrinstruction as a fallback for old CPUs that don't support thelzcntinstruction. #1108 #1166 - Fixed
partial_sort_copyto perform only operations that are required by the Standard to compile. #1088 - Fixed
deque::erase(iter, iter)to no longer perform self-move-assignments when called with an empty range. #1148 - Fixed
coroutine_handle<>::resumeandcoroutine_handle<>::operator()to allow exceptions to be thrown from coroutines. #1182 - Fixed
piecewise_constant_distributionandpiecewise_linear_distributionto return correctly distributed values. #1032 - Fixed
deque(and thereforequeueandstack) compiler errors in unusual scenarios whereiter + intanditer - intwould invoke an unexpected operator overload. #1161 - Fixed
anyandatomiccompiler errors when building with/Zc:noexceptTypes-. #1150 - Fixed
<charconv>hexfloatfrom_chars()to correctly handle numbers like"0.fffffffffffff8p-1022"which are just belownumeric_limits<Floating>::min(). #934 - Changed
shared_ptr's atomic functions to useSRWLOCKinstead of a naive spinlock, fixing priority inversion and improving performance. #1200 - Fixed incorrect constants that were producing incorrect results for
cosh()andsinh(). #1156 - Fixed 3 bugs in how
ostream << floating_pointhandles precision: #1173- Hexfloat output now ignores precision, as required by the Standard.
- Implemented LWG-231 (resolved in C++11, but overlooked); now,
0precision for scientific or general notation is directly passed tosprintf, instead of being replaced with6precision. - Negative precision no longer crashes.
-
get_time()now ignores case when parsing day and month names, as required by the Standard. #1168 #1240 -
<experimental/generator>now defines anunhandled_exception()member function, required for C++20 coroutine promise types, even when/EHsisn't being used. #1219 - Fixed compiler errors in the "iterator unwrapping" machinery for
counted_iterator. #1213 -
fillnow works correctly with pointers-to-volatileintegral types. (This change also applies ourmemset/memcmpoptimizations forfill/equala bit more aggressively; they now activate for filling contiguous ranges ofboolor comparing such with contiguous ranges of single-byte integer types.) #1160 -
valarray::operator[]now verifies its argument is in range when/D_CONTAINER_DEBUG_LEVEL=1. #1247 - Fixed a compiler error in
<complex>(introduced in VS 2019 16.7 by #367) when compiling with the Intel C++ Compiler's 80-bitlong doublemode. #1316-
Note: 80-bit
long doubleremains unsupported by MSVC.
-
Note: 80-bit
-
- Improved performance:
- Extended
equal()'smemcmp()optimization toranges::equal_toand arbitrary contiguous iterators. #831 -
optionalno longer unnecessarily zero-fills its storage when default constructed. #878 - Improved
span's debug codegen by simplifying its representation (as/std:c++latestisn't ABI-frozen). #877 - Use
__iso_volatile_store64for relaxed atomics on x86, and use__iso_volatile_store64unconditionally. #694 - Enabled more
constexprin<system_error>using the[[msvc::noop_dtor]]attribute we requested from the MSVC compiler front-end. #1016 - Hand-vectorized
std::reverse_copy. #804 - Refactored the comparison category types into aggregates so they can be passed in registers. #1065
- Optimized
std::fillandstd::fill_nforvector<bool>. #879 - Applied
DisableThreadLibraryCallsto all "satellite" DLLs. #1142 - Improved debug codegen in
<valarray>by extracting repeated calls tosize(). Also improved readability by expanding macros, and avoided unnecessary use of magic statics for non-trivial types. #1165 -
vectornow avoids quadratic complexity when itssize()is nearmax_size()(which is effectively impossible for the defaultallocator, making this an extremely obscure scenario). Now, if geometric growth would exceedmax_size(), we clamp tomax_size(). #1221
- Extended
- Enhanced behavior:
- Improved throughput:
- Simplified
is_function,is_object,is_member_function_pointer,is_member_object_pointer, andis_member_pointer. #460
- Simplified
- Improved documentation:
- Improved test coverage:
- Added test cases for the large integer fallback in
<charconv>to_chars()plain shortest round-trip. #835 - Future-proofed test code for the upcoming addition of C++20
std::chrono::last. #837 - Enabled more libcxx test coverage for
span. #839 - Added test coverage for the new
/Zc:preprocessorcompiler option. #677 - Added tests for LWG-3018 "
shared_ptrof function type". #833 - Fixed "unresolved" tests by linking with
/MANIFEST:EMBED. #862 - The test harness now emits a "note" for unsupported locales instead of a warning. #866
- Prevented failing tests from displaying assertion/crash dialog boxes. Also, the standard output streams of failing tests are no longer lost due to buffering. #906
- Increased test coverage in the ranges spaceship test by removing compiler bug workarounds. #852
- Improved ranges test machinery. #959
- Enabled "multiple translation unit" tests which hadn't been running in the new test infrastructure. These tests detect problems like forgetting to mark header-only non-templated functions as
inline. #1109 - Added a test to verify that
deque::erase(iter, iter)no longer performs self-move-assignments when called with an empty range. #1203 - Removed experimental
/awaitfrom test configurations, and re-enabled various tests now that compiler bugs have been fixed. #1207 - Added a test for
<coroutine>"end-to-end" behavior. #1215
- Added test cases for the large integer fallback in
- Code cleanups:
- Updated comment to cite LWG-3446. #841
- Renamed identifiers like
_R1to_Rx1, avoiding any resemblance to macros. #865 - Added comments to
<execution>, mentioning the subtle control flow. #849 - Avoided function-style casts in test code. #899
- Cleaned up
stl/src, changing C casts to C++ casts,0tonullptr, and more. #900 #912 - Added
ranges::_Ubeginandranges::_Uendinternal helper functions to simplify getting "unwrapped" iterators from a range. #901 - Renamed internal headers to
.hppand adjustedclang-formatto sort them last. #902 - Simplified comments, as
using _Predandusing operator<weren't necessary to mention. #977 - Removed compiler workarounds and used braces to construct objects. #978 #1020
- Improved ranges test machinery to better tolerate
using-directives. #979 - Consistently formatted
requires, preparing for when clang-format becomes aware of concepts. #999 - Provided comparison operators for
map,multimap,set, andmultisetinstead of their internal base class_Tree. #1022 - Updated the implementations of some of the oldest Range algorithms to match our current style:
- Took advantage of some of the clang-format changes in LLVM 10 to keep our codebase looking nice. #1075
- Removed unnecessary
std::qualification from product and test code. #1119 - Cleaned up compiler bug workarounds, which will be possible to remove in the near future. #1191
- Worked around some IntelliSense bugs in the concepts-enabled C++20 parts of the STL. #1216
- Removed an unnecessary compiler option
/d2Zi+fromCMakeLists.txt. #1218 - Consistently use
conjunction_vfor short-circuiting in conditionalexplicitclauses. #1241 - Avoided null pointer constants masquerading as integers by replacing
0withnullptrin a great many places. #1250
- Infrastructure improvements:
- Updated dependencies.
-
CMakeLists.txtnow defaults to using ourvcpkgsubmodule, simplifying our build process. #1124 - Removed a timing assumption from
test_atomic_wait.hppthat was causing intermittent test failures. - Added
/analyzeto PR/CI builds, and fixed the resulting warnings. #1009 - Enhanced our Code Format Validation check to detect lines exceeding 120 columns, and cleaned up a few occurrences in areas where clang-format had been suppressed. #1214
- Updated
_MSVC_STL_UPDATE. #897 #989 #1144
- Merged C++20 features:
-
P0415R1 #367
constexprFor<complex>(Again) -
P0476R2 #583
<bit>bit_cast - P0586R2 #621 Integer Comparison Functions
-
P0674R1 #309
make_shared()For Arrays -
P0718R2 #601
atomic<shared_ptr<T>>,atomic<weak_ptr<T>> -
P0722R3 #692 Efficient Sized
deleteFor Variable Sized Classes (library support types) -
P1023R0 #599
constexprForstd::arrayComparisons -
P1115R3 #566
erase()/erase_if()Returnsize_type -
P1831R1 #634 Deprecating
volatileIn The Standard Library -
P1871R1 #607
disable_sized_sentinel_for; renamesdisable_sized_sentineltodisable_sized_sentinel_for. -
P1956R1 #524
<bit>has_single_bit(),bit_ceil(),bit_floor(),bit_width() -
P1976R2 #500 Explicit Constructors For Fixed-Extent
spanFrom Dynamic-Extent Ranges -
P2116R0 #587 Removing
tuple-Like Protocol Support From Fixed-Extentspan
-
P0415R1 #367
- Merged partial C++20 features:
-
P0768R1 #515 Library Support For The Spaceship Comparison Operator
<=>; includeslexicographical_compare_three_way. -
P0784R7 #501 Library Support For More
constexprContainers; includesconstruct_at. -
P0896R4 Ranges:
-
#385 function objects
ranges::equal_to,ranges::not_equal_to,ranges::less,ranges::less_equal,ranges::greater, andranges::greater_equal -
#734
ranges::subrangeandranges::view_interface -
#759 changes to
reverse_iteratorto better adapt C++20 iterators -
#787 similar changes to
move_iterator, implementmove_sentinel -
#815 algorithm
ranges::find_end -
#821 algorithm
ranges::find_first_of -
#822 algorithm
ranges::adjacent_find
-
#385 function objects
-
P1135R6 The C++20 Synchronization Library; includes
atomic_flag::testand lock-free integral types. #684 -
P1614R2 #385 Adding Spaceship
<=>To The Library; includes conceptsthree_way_comparableandthree_way_comparable_with, type traitcompare_three_way_result(with_tvariant), and function objectcompare_three_way.
-
P0768R1 #515 Library Support For The Spaceship Comparison Operator
- Merged LWG issue resolutions:
-
LWG-3149 #635
DefaultConstructibleshould require default initialization -
LWG-3255 #506
span'sarrayconstructor is too strict -
LWG-3320 #548
span::cbegin/cendmethods produce different results thanstd::[ranges::]cbegin/cend -
LWG-3329 #512
totally_ordered_withboth directly and indirectly requirescommon_reference_with -
LWG-3330 #513 Include
<compare>from most library headers -
LWG-3390 #567
make_move_iterator()cannot be used to construct amove_iteratorfor a move-only iterator
-
LWG-3149 #635
- Merged proposed resolutions for LWG issues that were eventually accepted at the November 2020 virtual plenary meeting:
- Fixed bugs:
-
operator/andoperator%forchrono::durationnow properly SFINAE away whencommon_type_t<Rep1, Rep2>can't be formed. #573 -
<filesystem>directory_iteratornow properly handles"."and".."on network drives. #494 -
<filesystem>space()no longer requires read permissions for every directory along the path in some cases, and resolves symbolic links. #552 -
<filesystem>now considersERROR_BAD_NETPATHas a "file does not exist" condition. #616 -
filesystem::path::path(const Source&)is now properly removed from overload resolution whenSourceis a non-iterator with membervalue_typeeven in C++20 mode. #631 - The CMake release build now correctly uses the compiler flags in
VCLIBS_RELEASE_OPTIONS. #608 - Enabled the implementation of LWG-2899 in
/clrmode now that the fix for the compiler bug triggered by such (VSO-1006185) has been released. #417 - Fixed a bug specific to Clang 10 in
<system_error>and removed the_SILENCE_CLANG_CONCEPTS_MESSAGEbarrier in<concepts>now that we've worked with Clang developers to ensure Clang 10 and the STL play well together with Concepts enabled. #622 -
__cpp_lib_int_pow2is no longer incorrectly defined when the compiler lacks support for the intrinsics necessary to implementhas_single_bit,bit_ceil,bit_floor, andbit_width. Also,__cpp_lib_bitopsis no longer defined when the compiler is EDG-imitating-MSVC, so IntelliSense properly reflects the non-availability of operations not yet supported by MSVC. #695 - Fixed a 43-year-old bug in
boyer_moore_searcherby implementing a 40-year-old fix. #724 -
std::functionnow handles over-aligned types. #698 -
<cvt/sjis_0208>now correctly recognizes bad second bytes. #755 - Fixed several bugs in
complex's Sufficient Additional Overloads. #791-
arg(real)now behaves likearg(complex), instead of always returning0. -
conj(real)now behaves likeconj(complex), returning an imaginary part of negative zero. -
proj(real)now behaves likeproj(complex), mapping negative infinity to positive infinity. -
conjandprojnow returncomplex. -
normnow upgrades integers todoublebefore squaring, instead of after.
-
-
<filesystem>now consistently handles nonexistent network paths when the Windows API emitsERROR_INVALID_NAME. #800 - Fixed a race condition in the parallel
adjacent_findalgorithm that could cause it to return a result other than the first under heavy load. #816
-
- Enhanced behavior:
- Strengthened
noexceptforarrayiterators, also improving the behavior ofspanconstruction fromarrayiterators. #627 - Removed a
static_assertin<atomic>that prevented certain (completely conforming) usage from compiling until users defined the macro_ENABLE_ATOMIC_ALIGNMENT_FIX. Note: MSVC's STL has generated correct code for such usage since VS 2015 Update 2, so this change doesn't degrade correctness in any way - it merely removes an annoying compilation roadblock that warned about potential ODR violations when mixing code compiled with ancient toolsets that generated incorrect code for such usage in the first place. #723 - Enabled
bit_castfor IntelliSense now that front-end support is available. #733 -
complex'sreal(T)andimag(T)setters now properly returnvoid. #367 - Fixed Clang warnings in STL headers (when they aren't suppressed by Clang's treatment of "system headers") and enhanced test coverage to remain clean. #755
- We now detect compiler support for
constevalby testing__cpp_consteval. #765 - Fixed CUDA warnings/errors. #772
- Strengthened
- Improved performance:
- Massively improved the performance of
<system_error>by avoiding the need for synchronization when constructing error categories. #529 - Removed layers of calls to helpers and
forward()ininvoke(). #585 - Cached the result of
QueryPerformanceFrequencyin calls tosteady_clock::now(). #646 -
#653 attempted to avoid one division in
steady_clock::now(). This caused a regression wheresteady_clock::now()overflowed after approximately 15 minutes, so it was reverted by #972. The revert was ported to VS 2019 16.7 Preview 5, separately from the commit order in GitHub.) -
bitset::allnow returns upon finding the first non-set bit. #671 -
gcdnow uses the same machinery ascountr_zeroinstead of a hand-rolled bit counting loop. #665 -
atomic_thread_fencenow avoids unnecessary contention by using separate guard variables. #740 -
<algorithm>now increments/decrements copies of iterators, which could be more efficient for certain user-defined iterators than adding/subtracting1. #771 #803 -
<mutex>call_onceusesInitOnceBeginInitializeandInitOnceCompleteunconditionally now that we no longer support Windows XP, and avoids trips throughtryregions andstd::current_exception. #688
- Massively improved the performance of
- Improved throughput:
-
<array>no longer includes<algorithm>,<iterator>, and<tuple>; this is a source-breaking change for projects that weren't strict about including what they use. #482 - Reworked the machinery for the
is_invocablefamily of type traits, improving throughput. #408 -
~scoped_lock()now uses fold expressions, instead of helper functions in<tuple>that weren't used by product code anywhere else. #760
-
- Code cleanups:
- Consistently use empty braces to construct tags like
_Meow{}. #497 - Avoid declaring multiple variables on a single line. #550
- Removed comment now that
to_address()is now totallyconstexpr. #568 - Consistently use
__cpp_lib_byteto detect whetherstd::byteis available. #577 - Replaced
_STATIC_UNLESS_PUREwithstatic. (This was a macro workaround for a compiler bug that was fixed.) #584 - Removed
#if 1#endifpair after LWG-3150 was accepted. #638 - Removed comments after LWG-3201 was accepted. #640
- Updated the STL's required compilers to Clang 10 and MSVC 19.26. #708
- Replaced some implicit conversions with explicit conversions to silence the new MSVC warning C5219
implicit conversion from '%s' to '%s', possible loss of data. #730 - Refactored some
for-loops to follow the normal pattern. #709 - Removed the so-called
_ITERATOR_DEBUG_ARRAY_OVERLOADS(see #660). #735 - Silenced warnings for use of C++20 extensions in downlevel language modes when Clang believes the STL headers are not system headers. #737
- Removed and updated compiler bug workarounds. #742
- Fixed spelling mistakes. #743
- Improved build instructions: now the command-line build matches the IDE build, and respects
.gitignore. #764 - Removed unused
_RAISEmacro. Modernized code to use{}forindex_sequence,nullptr, and more C++ casts. Extracted assignments before comparisons. Usedunsigned intconsistently. #764 - Avoided shadowing
_Noinitand removed an unnecessarystruct. #772 - Removed redundant suppressions of warning C6294. #794
- Used more empty braces, added
_STDtosystem_category()etc. calls, changed<experimental/filesystem>error_codehandling to be consistent with Standard<filesystem>, removed an unnecessaryusing-directive in<regex>. #827
- Consistently use empty braces to construct tags like
- Infrastructure improvements:
- Updated dependencies. #620 #645
- Updated build compiler to VS 2019 16.6 Preview 2.
- Updated Clang to 10.0.0.
- Updated CMake to 3.16.5.
- Updated Ninja to 1.10.0.
- Updated Python to 3.8.2.
- Added CUDA 10.1 Update 2 (not yet used). #682
- Introduced CI testing using
lit. #520- Fully ported
libcxxtestsuite. - Partially ported
stdtestsuite. - Partially ported
tr1testsuite. #652 - Added testing instructions to the README. #647 #783
- Added
/BEtest coverage (for EDG-powered IntelliSense). #682 - Improved test infrastructure (speedups, timeouts, shuffling, etc.). #769
- Skipped
/clrtest coverage (as/clrsupport libraries aren't yet built). #796
- Fully ported
- Updated the pull request template to reflect that testing is now online. #644
-
VCLIBS_SUFFIXis now a CMake cache variable. #649 - Improved code format validation:
- Added a new "question" issue template to encourage folks to ask questions about the STL implementation. #687
- Updated dependencies. #620 #645
- Updated
_MSVC_STL_UPDATE. #637 #676 #793
- Merged C++20 features:
-
P0122R7 #142 #474
<span>-
P1024R3 Enhancing
spanUsability -
P1085R2 Removing
spanComparisons -
P1227R2 Unsigned
span::size() -
P1394R4 Range Constructor For
span -
P1872R0
spanShould Havesize_type, Notindex_type -
LWG-3101
span'sContainerconstructors need another constraint -
LWG-3102 Clarify
spaniteratorandconst_iteratorbehavior -
LWG-3103 Errors in taking subview of
spanshould be ill-formed where possible -
LWG-3144
spandoes not have aconst_pointertypedef -
LWG-3198 Bad constraint on
std::span::span() -
LWG-3274 Missing feature test macro for
<span> -
LWG-3369
span's deduction-guide for built-in arrays doesn't work
-
P1024R3 Enhancing
-
P0202R3 #425
constexprFor<algorithm>Andexchange()-
LWG-3256 Feature testing macro for
constexpralgorithms
-
LWG-3256 Feature testing macro for
-
P0357R3 #393 Supporting Incomplete Types In
reference_wrapper - P0619R4 #380 Removing C++17-Deprecated Features In C++20
-
P0879R0 #425
constexprFor Swapping Functions - P0883R2 #390 Fixing Atomic Initialization
- P0935R0 #415 Eradicating Unnecessarily Explicit Default Constructors
-
P1006R1 #397
constexprForpointer_traits<T*>::pointer_to() -
P1165R1 #467 Consistently Propagating Stateful Allocators In
basic_string'soperator+() -
P1423R3 #470
char8_tBackward Compatibility Remediation -
P1645R1 #399
constexprFor<numeric>Algorithms -
P1964R2 #565 Replacing
booleanWithboolean-testable - P2091R0 #565 Fixing Issues With Range Access CPOs
- P2102R0 #565 Making "Implicit Expression Variations" More Explicit
-
P0122R7 #142 #474
- Merged partial C++20 features:
-
P0768R1 Library Support For The Spaceship Comparison Operator
<=>-
#402 Deprecated
std::rel_ops.
-
#402 Deprecated
-
P0896R4 Ranges:
-
#389 some Ranges concepts, including P1456R1 Move-Only Views and P1870R1
safe_range. - #432 P2091R0 Issues With Range Access CPOs.
-
#565 algorithms
ranges::all_of,ranges::any_of,ranges::copy,ranges::copy_if,ranges::copy_n,ranges::count,ranges::count_if,ranges::equal,ranges::find,ranges::find_if,ranges::find_if_not,ranges::for_each,ranges::for_each_n,ranges::mismatch, andranges::none_of. -
#589 changes to
std::back_insert_iterator,std::front_insert_iterator, andstd::insert_iteratornecessary to model the Ranges iterator concepts.
-
#389 some Ranges concepts, including P1456R1 Move-Only Views and P1870R1
-
P0768R1 Library Support For The Spaceship Comparison Operator
- Merged LWG issue resolutions:
- Added test suites (not yet running):
- Fixed bugs:
-
complexacos(),acosh(), andasinh()now return correct results. #401 -
complexpow()is now overloaded correctly. #383 - Fixed
std::filesystem::remove()on ReFS. #407 - Avoided using
iter[idx]in all algorithms, because it's problematic with some unusual but Standard-conforming iterators. #464 -
<system_error>now mapsERROR_BROKEN_PIPEtoerrc::broken_pipe. #406 - Fixed a compiler error when compiling with the Intel C++ Compiler, because it hadn't implemented C++20 conditional
explicitin C++14/17 mode. #424- Note: The Intel C++ Compiler remains unsupported by MSVC.
- Fixed the visualizers for
atomicandatomic_flag. #315
-
- Improved performance:
- Improved throughput:
- Significantly improved compile times for
<iterator>and<array>. Note that this is a source-breaking change for user code that expected STL headers to include other headers in certain ways. #355
- Significantly improved compile times for
- Code cleanups:
-
src/syserror.cppnow uses range-for andstatic_cast. #481 - Changed macro constants to
constexprvariables. #487 - Cleaned up the implementation of
sort(). #449 - Added
static_assertis_sorted()for lookup tables. #451 - Removed compiler workarounds. #410 #452 #453 #454
- Added compiler workarounds. #475
- Updated the STL's required compiler to MSVC 19.25. #430
- Enabled clang-format for slightly more code. #458
-
- Infrastructure improvements:
- Updated
_MSVC_STL_UPDATE. #429 #486
- Hello, world!
- Announced this repo at CppCon 2019.
- Added initial documentation: readme, license, and roadmap.
- Added initial CMake build scripts for Desktop-only msvcp. #5 #80 #98 #101
- Investigated continuous integration options, like GitHub Actions or Azure Pipelines. (Chose Azure Pipelines.)
- Automated builds running in PRs. #114
- Investigated test harness solutions, either building our own to more closely match the internal system in a reasonable way, or using libcxx's
lit. (Chose to uselit.) - Began auditing test case source files from the
stdandtr1test suites. - Implemented Custom Autolinks in this repo.
- Merged C++20 features:
-
P0325R4 #135
to_array() -
P0340R3 #284 SFINAE-Friendly
underlying_type -
P0356R5 #158
bind_front() -
P0439R0 #124
enum class memory_order -
P0553R4 #310
<bit>Rotating And Counting Functions -
P0556R3 #310
<bit>ispow2(),ceil2(),floor2(),log2p1()bit_length()-
P1355R2 Narrow Contract For
ceil2()
-
P1355R2 Narrow Contract For
-
P0595R2 #353
is_constant_evaluated() -
P0631R8 #261
<numbers>Math Constants -
P0655R1 #201
visit<R>() -
P0738R2 #246
istream_iteratorCleanup -
P0767R1 #179 Deprecating
is_pod -
P0966R1 #176
string::reserve()Should Not Shrink -
P1209R0 #236
erase_if(),erase() -
P1227R2 #130 Signed
std::ssize() -
P1357R1 #127
is_bounded_array,is_unbounded_array -
P1612R1 #305 Relocating
endianTo<bit> - P1690R1 #341 Refining Heterogeneous Lookup For Unordered Containers
- P1902R1 #287 #353 Missing Feature-Test Macros 2017-2019
-
P1959R0 #381 Removing
weak_equalityAndstrong_equality
-
P0325R4 #135
- Merged partial C++20 features:
- Merged LWG issue resolutions:
-
LWG-2899 #193
is_(nothrow_)move_constructibleandtuple,optional, andunique_ptr -
LWG-3158 #195
tuple(allocator_arg_t, const Alloc&)should be conditionally explicit -
LWG-3199 #353
istream >> bitset<0>fails - LWG-3257 #353 Missing feature testing macro update from P0858
-
LWG-3266 #353
to_chars(bool)should be deleted
-
LWG-2899 #193
- Merged proposed resolutions for LWG issues (not yet accepted for the C++ Working Draft, but we've chosen to implement this speculatively):
- Fixed bugs:
- Restored
swap(unique_ptr&, unique_ptr&)which was mistakenly removed. #170 - When erasing an empty range in a
vector, avoided self-move-assigning all elements. #228 - Removed a
noexceptthat was incorrectly applied to an allocating helper function inlist. #77 -
valarraynow uses argument-dependent lookup when callingsin(),cos(),pow(),sqrt(), etc. as required by the Standard. #286 - Fixed
<filesystem>linker errors for UWP developers. #356 - Changed the return type of
locale's assignment operator toconst locale&as (perhaps surprisingly) required by the Standard. #324 - Fixed
regex_token_iteratorto return correct results. #131 - Non-member
begin()andend()now takebasic_string_viewby value as required by the Standard. #119 - Fixed
list::splice()to work correctly when splicing exactly half of onelistinto another. #129
- Restored
- Improved performance:
- Fixed a codegen size regression in
atomic<integral>andatomic<pointer>. #227 - Activated x64 FrameHandler4 exception handling, reducing the size of
msvcp140.dllfrom 588 KB to 528 KB. #154 - Reduced the stack space consumption of
listandforward_listinsertion. #366 - Improved the performance of 64-bit
atomicloads on x86. #87
- Fixed a codegen size regression in
- Improved throughput:
- Used
if constexprinstead of tag dispatch in<any>. #173
- Used
- Enhanced behavior:
- Improved the error message for
function<Ret (Args) noexcept>. #350 -
anynow supports over-aligned types. #173 - Improved the messages that are emitted when including newer headers in older Standard modes. #252
- Strengthened
noexceptforexchange(). #364 -
std::functionnow avoids usingtypeid(void)in our_HAS_STATIC_RTTI=0mode, for compatibility with Clang's-fno-rttimode. #375 - Added an error message explaining that the
<experimental/coroutine>,<experimental/generator>, and<experimental/resumable>headers aren't supported with Clang. #136
- Improved the error message for
- Code cleanups:
- Removed unnecessary
publickeywords instructinheritance. #219 - Used
iter[idx]for clarity in<algorithm>. #289 (Note that this was reverted in VS 2019 16.6 by #464.) - Fixed typos in comments and error messages. #96
- Marked more
virtualmember functions asoverride. #302 - Fused files together. #220 #374
- Consistently used the modern
int = 0SFINAE technique. #226 #244 #328 - Removed compiler bug workarounds. #175 #301 #372
- Various cleanups (described in detail in the PRs, not repeated here). #168 #221 #269 #320 #373
- Removed unnecessary
- Improved documentation:
- Added a comment explaining part of
invoke()'s implementation. #368
- Added a comment explaining part of
- Infrastructure improvements:
- Updated
_MSVC_STL_UPDATE. #253 #358