Skip to content

Releases: microsoft/STL

VS 2019 16.5

09 Mar 05:16

Choose a tag to compare

  • 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 use lit.)
    • Began auditing test case source files from the std and tr1 test suites.
    • Implemented Custom Autolinks in this repo.
  • Merged C++20 features:
  • Merged partial C++20 features:
  • Merged LWG issue resolutions:
    • LWG-2899 #193 is_(nothrow_)move_constructible and tuple, optional, and unique_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
  • Merged proposed resolutions for LWG issues (not yet accepted for the C++ Working Draft, but we've chosen to implement this speculatively):
    • LWG-3268 #151 memory_order::memory_order_meow broken in C++20
  • 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 noexcept that was incorrectly applied to an allocating helper function in list. #77
    • valarray now uses argument-dependent lookup when calling sin(), 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 to const locale& as (perhaps surprisingly) required by the Standard. #324
    • Fixed regex_token_iterator to return correct results. #131
    • Non-member begin() and end() now take basic_string_view by value as required by the Standard. #119
    • Fixed list::splice() to work correctly when splicing exactly half of one list into another. #129
  • Improved performance:
    • Fixed a codegen size regression in atomic<integral> and atomic<pointer>. #227
    • Activated x64 FrameHandler4 exception handling, reducing the size of msvcp140.dll from 588 KB to 528 KB. #154
    • Reduced the stack space consumption of list and forward_list insertion. #366
    • Improved the performance of 64-bit atomic loads on x86. #87
  • Improved throughput:
    • Used if constexpr instead of tag dispatch in <any>. #173
  • Enhanced behavior:
    • Improved the error message for function<Ret (Args) noexcept>. #350
    • any now supports over-aligned types. #173
    • Improved the messages that are emitted when including newer headers in older Standard modes. #252
    • Strengthened noexcept for exchange(). #364
    • std::function now avoids using typeid(void) in our _HAS_STATIC_RTTI=0 mode, for compatibility with Clang's -fno-rtti mode. #375
    • Added an error message explaining that the <experimental/coroutine>, <experimental/generator>, and <experimental/resumable> headers aren't supported with Clang. #136
  • Code cleanups:
    • Removed unnecessary public keywords in struct inheritance. #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 virtual member functions as override. #302
    • Fused files together. #220 #374
    • Consistently used the modern int = 0 SFINAE 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
  • Improved documentation:
    • Added a comment explaining part of invoke()'s implementation. #368
  • Infrastructure improvements:
Read more

VS 2019 16.10

09 Mar 05:22
8eca13a

Choose a tag to compare

  • 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](https://github.com/...
Read more