Skip to content

VS 2019 16.10

Compare
Choose a tag to compare
@StephanTLavavej StephanTLavavej released this 09 Mar 05:22
· 1563 commits to main since this release
8eca13a
  • The STL is C++20 feature complete.
  • Merged C++20 features:
    • P0053R7 #1564 <syncstream>
    • P0355R7 <chrono> Calendars And Time Zones:
      • #323 implemented calendars.
      • #1789 implemented new clocks, leap seconds, time zones, and parsing.
      • #1870 implemented <chrono>'s format() support (via formatter specializations) and remaining operator<<() 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.dll which 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
      • LWG-3185 Uses-allocator construction functions missing constexpr and noexcept
      • LWG-3187 P0591R4 reverted LWG-2586 fixes to scoped_allocator_adaptor::construct()
      • LWG-3321 uninitialized_construct_using_allocator should use construct_at
    • 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 constexpr Containers
    • P0896R4 Ranges, completed with the final PRs:
      • #1383 algorithms inplace_merge, stable_partition, stable_sort
      • #1693 view ranges::iota_view
      • #1436 view ranges::join_view
      • #1731 view ranges::split_view
      • #1748 Define __cpp_lib_ranges and declare victory!
      • Completes support for the 23 proposals and 35 LWG issues listed in this GH issue comment.
    • P0980R1 #1502 constexpr std::string
      • Initially supported for MSVC only; will be supported for Clang after LLVM-48606 is resolved.
    • P1004R2 #1407 #1690 #1698 constexpr std::vector
      • Initially supported for MSVC only; see note for constexpr std::string.
    • P1208R6 #664 <source_location>
      • Initially supported for MSVC only; will be supported for Clang after it implements consteval (see Clang's C++20 status).
    • 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
  • Merged LWG issue resolutions:
    • LWG-3171 #1573 LWG-2989 breaks directory_entry stream insertion
    • LWG-3449 #1457 take_view and take_while_view's sentinel<false> not comparable with their const iterator
    • LWG-3466 #1572 Specify the requirements for promise/future/shared_future consistently
  • 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 boolalpha extraction 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() with volatile byte*. #1557
    • Fixed ranges::unique to 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::allocator members 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/max values 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 from unordered_map or unordered_set would fail to compile with a static_assert. #1639
    • Fixed compiler errors in ranges::uninitialized_copy, ranges::uninitialized_copy_n, ranges::uninitialized_move, and ranges::uninitialized_move_n when attempting to use memcpy for efficiency. #1548
    • Fixed incorrect behavior in ranges::uninitialized_value_construct and ranges::uninitialized_value_construct_n when attempting to use memset for 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::failbit is now set.
      • Incomplete conversion specifications (e.g. '%' appearing as the last character of a format specification) now result in ios_base::failbit instead of literal matching.
      • The seconds field now permits 60 to handle leap seconds.
    • Fixed compiler errors in ranges::uninitialized_copy and ranges::uninitialized_move when attempting to use memcpy for 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_shared and allocate_shared with noexcept(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 #include to import. #1781
    • Fixed a regression in VS 2019 16.9 caused by #1336, where <cmath>'s usage of new compiler intrinsics in ceil, copysign, floor, round, and trunc would 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.
  • Improved performance:
    • countr_zero() and countr_one() in <bit> are now faster for uint8_t and uint16_t. #1540
    • atomic locks on x86/x64 now use the _mm_pause intrinsic with increasing back-off. #1146
    • Slightly optimized <charconv>'s integer to_chars() for the bases 3, 5, 6, 7, and 9. #1622
    • Significantly optimized <chrono>'s conversions between year_month_day and sys_days. #1634 #1646
    • Extended std algorithm optimizations to std::ranges algorithms 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 as import <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:strict compiler 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
      • Significantly improved the visualizer for coroutine_handle. #1785
      • Added a visualizer for span. #1774
      • Added visualizers for new <chrono> types. #1773
      • Added visualizers for strong_ordering, weak_ordering, and partial_ordering. #1855
    • Generalized <complex>'s 80-bit long double detection logic to work with Clang in addition to the Intel C++ Compiler. #1728
      • Note: 80-bit long double remains unsupported by MSVC.
  • 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 libcxx test suite. #1594
    • Added more test coverage for the default_initializable concept. #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 constexpr for 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 __declspec specifications 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_concepts isn'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 parallelize tool, which is used to run clang-format on all files in the codebase. #1632
    • Skipped a flaky test in the legacy tr1 test 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 _MSVC_STL_UPDATE. #1535 #1552 #1626 #1708 #1801