# Table of Contents - [MSVC Build Tools 14.51 Preview](#msvc-build-tools-1451-preview) - see the [VS 2026 Insiders Release Notes][] - [MSVC Build Tools 14.50](#msvc-build-tools-1450) - latest production version, see the [VS 2026 Release Notes][] - [VS 2022 Changelog][] - see the [VS 2022 Release History][] - [VS 2019 Changelog][] - see the [VS 2019 Release History][] C++23 features generally require the [`/std:c++23preview` or `/std:c++latest`][std_options] compiler options. [VS 2026 Insiders Release Notes]: https://learn.microsoft.com/en-us/visualstudio/releases/2026/release-notes-insiders [VS 2026 Release Notes]: https://learn.microsoft.com/en-us/visualstudio/releases/2026/release-notes [VS 2022 Changelog]: https://github.com/microsoft/STL/wiki/VS-2022-Changelog [VS 2019 Changelog]: https://github.com/microsoft/STL/wiki/VS-2019-Changelog [VS 2022 Release History]: https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-history [VS 2019 Release History]: https://learn.microsoft.com/en-us/visualstudio/releases/2019/history [std_options]: https://learn.microsoft.com/en-us/cpp/build/reference/std-specify-language-standard-version?view=msvc-180 # MSVC Build Tools 14.51 ## MSVC Build Tools 14.51 Preview - Removed non-Standard features: * TR1, including the `std::tr1` namespace, the old `array::assign()` member function, the old `` engines, and the old `` distributions `uniform_int` and `uniform_real`. [#5763](https://github.com/microsoft/STL/pull/5763) + Deprecated since VS 2017 15.5 in December 2017. * `` and ``. [#5764](https://github.com/microsoft/STL/pull/5764) + Deprecated since VS 2015 in July 2015. * ``. [#5765](https://github.com/microsoft/STL/pull/5765) + Deprecated since VS 2019 16.3 in September 2019. * `stdext::checked_array_iterator` and `stdext::unchecked_array_iterator`. [#5817](https://github.com/microsoft/STL/pull/5817) + Deprecated since VS 2022 17.8 in November 2023 (for C++17 and later) and VS 2022 17.11 in August 2024 (unconditionally). * `basic_istream::ipfx()`/`isfx()` and `basic_ostream::opfx()`/`osfx()`. [#5834](https://github.com/microsoft/STL/pull/5834) + Deprecated since VS 2022 17.9 in February 2024 (for C++17 and later) and VS 2022 17.11 in August 2024 (unconditionally). * `locale::empty()`. [#5834](https://github.com/microsoft/STL/pull/5834) + Deprecated since VS 2022 17.14 in May 2025. - Merged C++26 features: * [P3016R6](https://wg21.link/P3016R6) [#5847](https://github.com/microsoft/STL/pull/5847) Resolve Inconsistencies In `begin`/`end` For `valarray` And Braced Initializer Lists * [P3349R1](https://wg21.link/P3349R1) [#5683](https://github.com/microsoft/STL/pull/5683) Converting Contiguous Iterators To Pointers * [P3503R3](https://wg21.link/P3503R3) [#5630](https://github.com/microsoft/STL/pull/5630) Make Type-Erased Allocator Use In `promise` And `packaged_task` Consistent - Merged C++23 features: * [P2255R2](https://wg21.link/P2255R2) [#5537](https://github.com/microsoft/STL/pull/5537) Type Traits To Detect References Binding To Temporaries + Initially supported for Clang only. * [P2674R1](https://wg21.link/P2674R1) [#5445](https://github.com/microsoft/STL/pull/5445) `is_implicit_lifetime` + Initially supported for Clang only. - Merged *partial* C++20 features: * [P0466R5](https://wg21.link/P0466R5) Layout-Compatibility And Pointer-Interconvertibility Traits + This feature was fully implemented for MSVC by [#1575](https://github.com/microsoft/STL/pull/1575) in VS 2019 16.10. + `is_layout_compatible` and `is_pointer_interconvertible_base_of` are now implemented for Clang, as the necessary compiler builtins recently became available. [#5621](https://github.com/microsoft/STL/pull/5621) + `is_pointer_interconvertible_with_class()` and `is_corresponding_member()` remain to be implemented for Clang, as the necessary compiler builtins are not yet available. - Merged LWG issue resolutions: * [LWG-3090](https://cplusplus.github.io/LWG/issue3090) [#6050](https://github.com/microsoft/STL/pull/6050) What is \[time.duration.cons\]/4's "no overflow is induced in the conversion" intended to mean? * [LWG-3343](https://cplusplus.github.io/LWG/issue3343) [#5912](https://github.com/microsoft/STL/pull/5912) Ordering of calls to `unlock()` and `notify_all()` in *Effects* element of `notify_all_at_thread_exit()` should be reversed * [LWG-3436](https://cplusplus.github.io/LWG/issue3436) [#5920](https://github.com/microsoft/STL/pull/5920) `std::construct_at` should support arrays * [LWG-3617](https://cplusplus.github.io/LWG/issue3617) [#5921](https://github.com/microsoft/STL/pull/5921) `function`/`packaged_task` deduction guides and deducing `this` + This was originally implemented for MSVC by [#2966](https://github.com/microsoft/STL/pull/2966) in VS 2022 17.4. It's now implemented for Clang, after Clang 19 added complete support for [P0847R7](https://wg21.link/P0847R7) "Deducing `this`". * [LWG-4243](https://cplusplus.github.io/LWG/issue4243) [#5867](https://github.com/microsoft/STL/pull/5867) `as_bytes`/`as_writable_bytes` is broken with `span` * [LWG-4253](https://cplusplus.github.io/LWG/issue4253) [#5868](https://github.com/microsoft/STL/pull/5868) `basic_const_iterator` should provide `iterator_type` * [LWG-4257](https://cplusplus.github.io/LWG/issue4257) [#5895](https://github.com/microsoft/STL/pull/5895) Stream insertion for `chrono::local_time` should be constrained * [LWG-4266](https://cplusplus.github.io/LWG/issue4266) [#5880](https://github.com/microsoft/STL/pull/5880) `layout_stride::mapping` should treat empty mappings as exhaustive * [LWG-4272](https://cplusplus.github.io/LWG/issue4272) [#5900](https://github.com/microsoft/STL/pull/5900) For `rank == 0`, `layout_stride` is atypically convertible * [LWG-4274](https://cplusplus.github.io/LWG/issue4274) [#5893](https://github.com/microsoft/STL/pull/5893) The `chrono::hh_mm_ss` constructor is ill-formed for unsigned durations * [LWG-4294](https://cplusplus.github.io/LWG/issue4294) [#5869](https://github.com/microsoft/STL/pull/5869) `bitset(const CharT*)` constructor needs to be constrained * [LWG-4301](https://cplusplus.github.io/LWG/issue4301) [#5885](https://github.com/microsoft/STL/pull/5885) [#5940](https://github.com/microsoft/STL/pull/5940) `condition_variable{_any}::wait_{for, until}` should take timeout by value * [LWG-4312](https://cplusplus.github.io/LWG/issue4312) [#5904](https://github.com/microsoft/STL/pull/5904) Const and value category mismatch for `allocator_arg_t`/`allocator_arg` in the description of uses-allocator construction * [LWG-4366](https://cplusplus.github.io/LWG/issue4366) [#5896](https://github.com/microsoft/STL/pull/5896) Heterogeneous comparison of `expected` may be ill-formed * [LWG-4398](https://cplusplus.github.io/LWG/issue4398) [#5883](https://github.com/microsoft/STL/pull/5883) `enable_nonlocking_formatter_optimization` should be disabled for container adaptors * [LWG-4399](https://cplusplus.github.io/LWG/issue4399) [#5897](https://github.com/microsoft/STL/pull/5897) `enable_nonlocking_formatter_optimization` for `pair` and `tuple` needs `remove_cvref_t` - Fixed bugs: * Fixed `` to perform matching non-recursively, avoiding stack overflows and improving performance. [#5703](https://github.com/microsoft/STL/pull/5703) [#5714](https://github.com/microsoft/STL/pull/5714) [#5734](https://github.com/microsoft/STL/pull/5734) [#5745](https://github.com/microsoft/STL/pull/5745) [#5762](https://github.com/microsoft/STL/pull/5762) [#5774](https://github.com/microsoft/STL/pull/5774) [#5790](https://github.com/microsoft/STL/pull/5790) [#5798](https://github.com/microsoft/STL/pull/5798) [#5818](https://github.com/microsoft/STL/pull/5818) [#5828](https://github.com/microsoft/STL/pull/5828) [#5835](https://github.com/microsoft/STL/pull/5835) [#5865](https://github.com/microsoft/STL/pull/5865) [#5889](https://github.com/microsoft/STL/pull/5889) [#5918](https://github.com/microsoft/STL/pull/5918) [#5939](https://github.com/microsoft/STL/pull/5939) [#5954](https://github.com/microsoft/STL/pull/5954) [#5961](https://github.com/microsoft/STL/pull/5961) [#6005](https://github.com/microsoft/STL/pull/6005) [#6022](https://github.com/microsoft/STL/pull/6022) [#6026](https://github.com/microsoft/STL/pull/6026) [#6055](https://github.com/microsoft/STL/pull/6055) * Fixed `` bugs when parsing repetitions in extremely unusual cases. [#5716](https://github.com/microsoft/STL/pull/5716) * Fixed `` to avoid throwing a `regex_error` when a repeated pattern contains a lookahead assertion. [#5793](https://github.com/microsoft/STL/pull/5793) + This fixed a regression that was introduced by [#5456](https://github.com/microsoft/STL/pull/5456) in the MSVC Build Tools 14.50. * Fixed `` to perform matching correctly when a loop has a bounded number of repetitions and a context-dependent empty alternative. [#5820](https://github.com/microsoft/STL/pull/5820) * Fixed `basic_string::resize_and_overwrite()` to require the given operation to return an integer-like type. [#5695](https://github.com/microsoft/STL/pull/5695) * Added a compiler bug workaround for Clang x86, fixing 64-bit `atomic` behavior. [#5708](https://github.com/microsoft/STL/pull/5708) * Fixed the `vector` optimization for `copy()` to avoid a forbidden negative shift in a specific scenario. [#5726](https://github.com/microsoft/STL/pull/5726) * Fixed `independent_bits_engine` to avoid forbidden full shifts in specific scenarios. [#5740](https://github.com/microsoft/STL/pull/5740) * Fixed compiler errors in `vector` when programs are taking advantage of our non-Standard legacy support for mismatched allocator types (i.e. `vector>`, which is forbidden by the Standard). [#5729](https://github.com/microsoft/STL/pull/5729) + This fixed a regression that was introduced by [#4977](https://github.com/microsoft/STL/pull/4977) in VS 2022 17.13. * Fixed compiler warnings and errors in `basic_string` for allocators with unusual `size_type`s. [#5562](https://github.com/microsoft/STL/pull/5562) [#5775](https://github.com/microsoft/STL/pull/5775) * Fixed a crash in the x64/x86 vectorized implementations of `wstring::find_first_of()` and `wstring::find_last_of()` that was specific to searching for certain combinations of characters inside and outside the \[0, 255\] range. [#5758](https://github.com/microsoft/STL/pull/5758) + This fixed a regression that was introduced by [#5029](https://github.com/microsoft/STL/pull/5029) in VS 2022 17.14. + This fix was backported to VS 2022 17.14.20 and the MSVC Build Tools 14.50. * Fixed `std::pow(dbl, 2)` to return `dbl * dbl` as a special case, working around an accuracy issue in UCRT `::pow()` that affects ~0.04% of `double` values. [#5771](https://github.com/microsoft/STL/pull/5771) + This fixed a regression that was introduced by [#903](https://github.com/microsoft/STL/pull/903) in VS 2019 16.8. + For example, the square of 0.96211481342217475276612503876094706356525421142578125 (hexfloat `0x1.ec9a50154a6f9p-1`) is mathematically 0.9256649142063861358000347706773514725967013405547974870554600612150564220570458928705193102359771728515625, which cannot be exactly represented as a 64-bit `double`. UCRT `::pow(x, 2.0)` returns 0.92566491420638608023097049226635135710239410400390625 (hexfloat `0x1.d9f0c06b2463dp-1`), but `x * x` returns 0.9256649142063861912532729547820053994655609130859375 (hexfloat `0x1.d9f0c06b2463ep-1`). The `double` value of `x * x` is slightly closer to the mathematically exact square, therefore it is correctly rounded and should be returned. * Fixed `ranges::to`, allowing it to create unions. [#5794](https://github.com/microsoft/STL/pull/5794) * Fixed `stable_sort()`, `stable_partition()`, and `inplace_merge()` to handle over-aligned elements by default. [#5807](https://github.com/microsoft/STL/pull/5807) * Fixed `ranges::partition` to meet the Standard's complexity requirements for bidirectional non-common ranges. [#5887](https://github.com/microsoft/STL/pull/5887) * Fixed the `noexcept` specification of an internal helper function for debug checks of strict weak orderings, affecting extremely unusual comparison function objects with non-`bool` return types. [#5931](https://github.com/microsoft/STL/pull/5931) * Fixed various classes and functions to accept only cv-unqualified types as standard signed and unsigned integer types. [#5946](https://github.com/microsoft/STL/pull/5946) * Fixed compiler errors in `` formatting for `duration`s with unsigned representation types. [#5947](https://github.com/microsoft/STL/pull/5947) * Fixed `piecewise_constant_distribution`, `piecewise_linear_distribution`, and their `param_type`s to avoid inheriting from `discrete_distribution` and its `param_type`. [#6032](https://github.com/microsoft/STL/pull/6032) * Fixed ``'s handling of certain characters in non-Unicode code pages. [#6059](https://github.com/microsoft/STL/pull/6059) - Improved performance: * Improved `` performance by adding an optimized implementation of divide-ceiling for 128-bit integers. [#5637](https://github.com/microsoft/STL/pull/5637) * Updated `` to use Fused Multiply-Add (FMA) intrinsics for Clang. [#5721](https://github.com/microsoft/STL/pull/5721) * Optimized `sample()`, `shuffle()`, `ranges::sample`, and `ranges::shuffle` by using Daniel Lemire's algorithm [Fast Random Integer Generation in an Interval](https://arxiv.org/abs/1805.10941). + This was originally implemented for `uniform_int_distribution` by [#3012](https://github.com/microsoft/STL/pull/3012) in VS 2022 17.5. * Added x64/x86 vectorized implementations of: + `includes()` and `ranges::includes`. [#5590](https://github.com/microsoft/STL/pull/5590) + `replace_copy()` and `ranges::replace_copy`. [#5980](https://github.com/microsoft/STL/pull/5980) * Added ARM64 vectorized implementations of: + `swap_ranges()` and `ranges::swap_ranges`. [#5819](https://github.com/microsoft/STL/pull/5819) + `rotate()` and `ranges::rotate`. [#5845](https://github.com/microsoft/STL/pull/5845) + `reverse()`, `reverse_copy()`, `ranges::reverse`, and `ranges::reverse_copy`. [#5870](https://github.com/microsoft/STL/pull/5870) + `min_element()`, `max_element()`, `minmax_element()`, `ranges::min_element`, `ranges::max_element`, and `ranges::minmax_element`. [#5949](https://github.com/microsoft/STL/pull/5949) + `min()`, `max()`, `minmax()`, `ranges::min`, `ranges::max`, and `ranges::minmax`. [#5963](https://github.com/microsoft/STL/pull/5963) + `find()` and `ranges::find`. [#6003](https://github.com/microsoft/STL/pull/6003) + `is_sorted_until()` and `ranges::is_sorted_until`. [#6018](https://github.com/microsoft/STL/pull/6018) + `ranges::find_last`. [#6030](https://github.com/microsoft/STL/pull/6030) + `count()` and `ranges::count`. [#6049](https://github.com/microsoft/STL/pull/6049) * Improved the x64/x86 vectorized implementations of: + `search_n()` and `ranges::search_n`. [#5544](https://github.com/microsoft/STL/pull/5544) + `mismatch()` and `ranges::mismatch`. [#5591](https://github.com/microsoft/STL/pull/5591) + `count()`, `find()`, `find_last()`, `remove()`, `remove_copy()`, `replace()`, and their `ranges` counterparts. [#5767](https://github.com/microsoft/STL/pull/5767) * Optimized `any::swap()` by avoiding unnecessary copies. [#5710](https://github.com/microsoft/STL/pull/5710) * Optimized `transform()` for `vector` with the unary function object `logical_not` and the binary function objects `logical_and`, `logical_or`, `equal_to`, and `not_equal_to`. [#5769](https://github.com/microsoft/STL/pull/5769) * Constructing a `move_only_function` from a `std::function` now avoids double-wrapping. [#5808](https://github.com/microsoft/STL/pull/5808) [#5919](https://github.com/microsoft/STL/pull/5919) [#5917](https://github.com/microsoft/STL/pull/5917) [#6031](https://github.com/microsoft/STL/pull/6031) * Optimized `steady_clock::now()` to more efficiently convert from a performance counter frequency of 24 MHz (commonly seen on ARM64 systems) to nanoseconds. [#5832](https://github.com/microsoft/STL/pull/5832) * Optimized `to_string()` and `to_wstring()` for integers by printing digits in pairs. [#5691](https://github.com/microsoft/STL/pull/5691) - Enhanced behavior: * For C++20, enabled [P2404R3](https://wg21.link/P2404R3) Move-Only Types For Comparison Concepts. [#5928](https://github.com/microsoft/STL/pull/5928) + This was originally implemented for C++23 by [#3345](https://github.com/microsoft/STL/pull/3345) in VS 2022 17.6. * Unconditionally enabled [LWG-3187](https://cplusplus.github.io/LWG/issue3187) for uses-allocator construction. + This was originally implemented for C++20 by [#1668](https://github.com/microsoft/STL/pull/1668) in VS 2019 16.10. * Deprecated the non-Standard ``, ``, and `` headers. [#5804](https://github.com/microsoft/STL/pull/5804) * Removed the confusing escape hatch macro `_ALLOW_RTCc_IN_STL`. The STL doesn't support the [`/RTCc`](https://learn.microsoft.com/en-us/cpp/build/reference/rtc-run-time-error-checks?view=msvc-170) compiler option because it rejects conformant code with runtime termination. Previously, the STL blocked `/RTCc` with a compiler error, but provided an escape hatch macro to suppress that compiler error (so that compile-time STL components, like ``, could theoretically be used). This escape hatch intentionally did nothing to the STL's conformant code that would attempt to avoid runtime termination, occasionally confusing users. Now that the escape hatch has been removed, users must remove the `/RTCc` compiler option. [#5906](https://github.com/microsoft/STL/pull/5906) + Note: The `/RTCs` and `/RTCu` compiler options (combined into `/RTC1`) are good and unaffected. They only complain about undefined behavior, and the STL is perfectly compatible with them. * Implemented compiler warnings when the Standard forbids user-defined specializations of Standard Library templates. [#5536](https://github.com/microsoft/STL/pull/5536) [#5937](https://github.com/microsoft/STL/pull/5937) + This uses the recently-implemented attributes `[[msvc::no_specializations("reason")]]` and `[[clang::no_specializations("reason")]]`. * Silenced spurious static analysis warnings in `vector::max_size()`. [#5707](https://github.com/microsoft/STL/pull/5707) * Silenced CodeQL warnings. [#5711](https://github.com/microsoft/STL/pull/5711) * Improved ``'s engines and distributions to no longer derive from their non-Standard TR1 predecessors. [#5712](https://github.com/microsoft/STL/pull/5712) * Updated `tuple` to apply the resolution of [LWG-3677](https://wg21.link/lwg3677) "Is a *cv*-qualified `pair` specially handled in uses-allocator construction?". [#5669](https://github.com/microsoft/STL/pull/5669) + This was originally implemented for `pair` by [#3396](https://github.com/microsoft/STL/pull/3396) in VS 2022 17.7. * Updated `` to handle Unicode 17. [#5571](https://github.com/microsoft/STL/pull/5571) [#5803](https://github.com/microsoft/STL/pull/5803) * Updated the Standard Library Modules, when used with the UCRT from the Windows 11 SDK 10.0.26100.6901 or newer, to remove a workaround that affected various `` functions. [#5805](https://github.com/microsoft/STL/pull/5805) * Updated C++23 `move_only_function` to prepare for future interactions with C++26 features. [#5849](https://github.com/microsoft/STL/pull/5849) * Improved `is_clock_v` to perform stricter checks beyond the Standard's minimum requirements. [#5892](https://github.com/microsoft/STL/pull/5892) * Improved the accuracy of `poisson_distribution` and `binomial_distribution` by calling the UCRT's `lgamma()` function instead of highly inaccurate handwritten code. [#5891](https://github.com/microsoft/STL/pull/5891) * Improved `num_put::do_put()` to avoid any possibility of casting a negative `sprintf_s()` return value to `size_t`. [#5925](https://github.com/microsoft/STL/pull/5925) * Silenced the off-by-default [warning C4365](https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4365?view=msvc-170) (signed/unsigned mismatch) when compiling `vector` with the highly unusual compiler option [`/J`](https://learn.microsoft.com/en-us/cpp/build/reference/j-default-char-type-is-unsigned?view=msvc-170). [#6013](https://github.com/microsoft/STL/pull/6013) + In general, the STL does not attempt to be clean with respect to off-by-default warnings, but we occasionally address them on a case-by-case basis. - Improved debugger visualization: * Added a `c_str()` intrinsic function to `basic_string`'s visualizer, allowing conditional breakpoints like `strcmp(cat_name.c_str(), "Juliette Andromeda Meow") == 0`. [#5997](https://github.com/microsoft/STL/pull/5997) * Added visualizers for more comparison function objects. [#6016](https://github.com/microsoft/STL/pull/6016) * Improved visualizers for various iterators. [#6019](https://github.com/microsoft/STL/pull/6019) - Improved test coverage: * Enabled ARM64EC test coverage for Clang. [#5717](https://github.com/microsoft/STL/pull/5717) * Removed `/analyze` from the libcxx test suite to reduce compiler memory consumption, as we have sufficient test coverage elsewhere. [#5724](https://github.com/microsoft/STL/pull/5724) * Fixed bogus tests for the most triumphant type trait functions `is_corresponding_member()` and `is_pointer_interconvertible_with_class()`. [#5730](https://github.com/microsoft/STL/pull/5730) [#5737](https://github.com/microsoft/STL/pull/5737) * Added test coverage for `constexpr` `vector`. [#5728](https://github.com/microsoft/STL/pull/5728) * Reactivated test coverage using Clang's Undefined Behavior Sanitizer (UBSan). [#5746](https://github.com/microsoft/STL/pull/5746) * Improved test coverage for ``. [#5749](https://github.com/microsoft/STL/pull/5749) * Added test coverage for ``'s long path support. [#5783](https://github.com/microsoft/STL/pull/5783) [#5799](https://github.com/microsoft/STL/pull/5799) * Added benchmarks for ``'s floating-point `to_chars()`. [#5700](https://github.com/microsoft/STL/pull/5700) * Centralized test machinery for exercising code with varying levels of Instruction Set Architecture (ISA) extensions, and added assertions to verify that tests are being run on machines that actually support the highest level of ISA extensions being used. [#5874](https://github.com/microsoft/STL/pull/5874) * Updated our LLVM submodule, including new tests. [#5888](https://github.com/microsoft/STL/pull/5888) [#5955](https://github.com/microsoft/STL/pull/5955) [#6006](https://github.com/microsoft/STL/pull/6006) [#6058](https://github.com/microsoft/STL/pull/6058) * Improved messages for syntax errors in expected test results. [#5948](https://github.com/microsoft/STL/pull/5948) * Updated tests for upcoming compiler changes to `consteval`. [#5960](https://github.com/microsoft/STL/pull/5960) * Added test coverage to ensure that various Standard headers (e.g. ``) provide the iterator range access functions (e.g. non-member `begin()` and `end()`). [#5968](https://github.com/microsoft/STL/pull/5968) - Improved documentation: * Added comments. [#6039](https://github.com/microsoft/STL/pull/6039) [#6043](https://github.com/microsoft/STL/pull/6043) - Code cleanups: * Reduced code duplication for: + `` machinery. [#5696](https://github.com/microsoft/STL/pull/5696) + `vector` benchmarks. [#5732](https://github.com/microsoft/STL/pull/5732) [#5742](https://github.com/microsoft/STL/pull/5742) + `move_only_function`. [#5810](https://github.com/microsoft/STL/pull/5810) * Removed compiler bug workarounds. [#5717](https://github.com/microsoft/STL/pull/5717) [#5783](https://github.com/microsoft/STL/pull/5783) [#5809](https://github.com/microsoft/STL/pull/5809) [#6012](https://github.com/microsoft/STL/pull/6012) * Fixed a typo. [#5713](https://github.com/microsoft/STL/pull/5713) * Reworked internal macros to make it easier to add vectorized algorithms for ARM64. [#5801](https://github.com/microsoft/STL/pull/5801) * Cleaned up the separately compiled implementations of x64/x86 vectorized algorithms: + Added `template` and `typename` keywords as required by the Standard. [#5743](https://github.com/microsoft/STL/pull/5743) + Removed unused functions. [#5744](https://github.com/microsoft/STL/pull/5744) + Avoided unnecessary unaligned memory accesses in `bitset`'s constructors from strings. [#5759](https://github.com/microsoft/STL/pull/5759) + Avoided unnecessary unaligned memory accesses in `swap_ranges()`, `ranges::swap_ranges`, `rotate()`, and `ranges::rotate`. [#5760](https://github.com/microsoft/STL/pull/5760) + Removed a bogus assumption (which was fortunately harmless). [#5761](https://github.com/microsoft/STL/pull/5761) * Various cleanups (described in detail in the PRs, not repeated here). [#5753](https://github.com/microsoft/STL/pull/5753) [#5922](https://github.com/microsoft/STL/pull/5922) [#5924](https://github.com/microsoft/STL/pull/5924) * Simplified ``'s implementation. [#5784](https://github.com/microsoft/STL/pull/5784) * Updated the STL's internal implementation to be compatible with .NET 8.0. [#5814](https://github.com/microsoft/STL/pull/5814) * Avoided internal usage of a deprecated type trait. [#5811](https://github.com/microsoft/STL/pull/5811) * Deleted dozens of files containing thousands of lines of unnecessary code for floating-point functions. [#5836](https://github.com/microsoft/STL/pull/5836) [#5959](https://github.com/microsoft/STL/pull/5959) * Avoided compiler warnings in the STL's separately compiled source files. [#5875](https://github.com/microsoft/STL/pull/5875) [#5876](https://github.com/microsoft/STL/pull/5876) * Removed comments that were citing proposed resolutions for LWG issues, now that those issues have been officially resolved by the November 2025 meeting. [#5909](https://github.com/microsoft/STL/pull/5909) * Simplified how `` formatting validates modifier characters. [#5905](https://github.com/microsoft/STL/pull/5905) * Improved `zoned_time`'s constructors to be constrained with concepts instead of SFINAE. [#5907](https://github.com/microsoft/STL/pull/5907) * Used `if constexpr` to simplify: + Locale helper functions. [#5923](https://github.com/microsoft/STL/pull/5923) + `lock()` and `try_lock()`. [#5941](https://github.com/microsoft/STL/pull/5941) * Simplified ``'s implementation by using `bit_cast()`. [#5973](https://github.com/microsoft/STL/pull/5973) * Changed ``'s implementations of `lerp()` for `long double` to be consistent with other functions. [#6021](https://github.com/microsoft/STL/pull/6021) - Infrastructure improvements: * Added ARM64 runtime test coverage. [#5815](https://github.com/microsoft/STL/pull/5815) * Added ARM64EC runtime test coverage. [#5831](https://github.com/microsoft/STL/pull/5831) * Added a Configure Tests stage to Azure Pipelines, validating that test paths are properly listed in various files. [#5888](https://github.com/microsoft/STL/pull/5888) * Improved CI reliability by not building the benchmarks with Clang for x86. [#5704](https://github.com/microsoft/STL/pull/5704) + This avoids a sporadic crash in lld-link.exe. * Updated the CI to print a histogram of test run times and a list of the slowest running tests. [#5878](https://github.com/microsoft/STL/pull/5878) * Updated dependencies. [#5717](https://github.com/microsoft/STL/pull/5717) [#5783](https://github.com/microsoft/STL/pull/5783) [#5879](https://github.com/microsoft/STL/pull/5879) [#5888](https://github.com/microsoft/STL/pull/5888) [#5955](https://github.com/microsoft/STL/pull/5955) [#6011](https://github.com/microsoft/STL/pull/6011) [#6058](https://github.com/microsoft/STL/pull/6058) + Updated MSVC Compiler to 19.50.35722 (now required). + Updated Clang to 20.1.8 (now required). + Updated CMake to 4.1.2 (now required). + Updated Python to 3.14.2 (now required). + Updated Boost.Math to 1.90.0. + Updated Google Benchmark to 1.9.5. - Build system improvements: * Added compiler and linker options to the GitHub CMake build system, fixing divergence with the MSVC-internal MSBuild build system. [#5652](https://github.com/microsoft/STL/pull/5652) * The STL now clearly rejects attempts to build a preset or test a build whose architecture doesn't match the Developer Command Prompt (which is x86-native, but very slightly different from the x86 Native Tools Command Prompt where enforcement was previously validated). [#5731](https://github.com/microsoft/STL/pull/5731) - Updated `_MSVC_STL_UPDATE`. [#5709](https://github.com/microsoft/STL/pull/5709) [#5752](https://github.com/microsoft/STL/pull/5752) [#5822](https://github.com/microsoft/STL/pull/5822) [#5930](https://github.com/microsoft/STL/pull/5930) [#5985](https://github.com/microsoft/STL/pull/5985) # MSVC Build Tools 14.50 This shipped in VS 2026 18.0. - The STL no longer supports targeting Windows 7 / Server 2008 R2, Windows 8 / Server 2012, and Windows 8.1 / Server 2012 R2: * Improved the performance of `system_clock::now()` and `atomic::wait()` by directly calling APIs that were added in Windows 8. [#5432](https://github.com/microsoft/STL/pull/5432) [#5496](https://github.com/microsoft/STL/pull/5496) * Improved the performance of STL Hardening by using the MSVC [`__fastfail`](https://learn.microsoft.com/en-us/cpp/intrinsics/fastfail?view=msvc-170) intrinsic that was added in Windows 8, and the Clang [`__builtin_verbose_trap`](https://clang.llvm.org/docs/LanguageExtensions.html#builtin-verbose-trap) intrinsic. [#5433](https://github.com/microsoft/STL/pull/5433) [#5458](https://github.com/microsoft/STL/pull/5458) * Simplified the `` implementation by unconditionally calling APIs that were added in Windows 8. [#5434](https://github.com/microsoft/STL/pull/5434) * Windows 10 / Server 2016 are our minimum supported operating systems. [#5510](https://github.com/microsoft/STL/pull/5510) - The STL no longer supports targeting 32-bit ARM. [#5594](https://github.com/microsoft/STL/pull/5594) - Merged C++26 features: * [P0472R3](https://wg21.link/P0472R3) [#5382](https://github.com/microsoft/STL/pull/5382) Put `monostate` In `` * [P3223R2](https://wg21.link/P3223R2) [#5604](https://github.com/microsoft/STL/pull/5604) Making `istream::ignore()` Less Surprising - Merged *partial* C++26 features: * [P3697R1](https://wg21.link/P3697R1) [#5650](https://github.com/microsoft/STL/pull/5650) Minor Additions To Standard Library Hardening - Merged LWG issue resolutions: * [LWG-2503](https://cplusplus.github.io/LWG/issue2503) [#5535](https://github.com/microsoft/STL/pull/5535) `multiline` option should be added to `syntax_option_type` + For us, this is a `regex` behavioral change, so we added an escape hatch. By default, we define `_REGEX_LEGACY_MULTILINE_MODE` to `0`, which requests Standard behavior: - For ECMAScript, matching is non-multiline by default, but `regex_constants::multiline` can be requested. - For POSIX grammars, matching is non-multiline, and `regex_constants::multiline` is ignored; see [N5008](https://wg21.link/N5008) \[tab:re.synopt\]. + Defining `_REGEX_LEGACY_MULTILINE_MODE` to `1` requests legacy behavior: - For all grammars, matching is multiline, and `regex_constants::multiline` is redundant. * [LWG-4186](https://cplusplus.github.io/LWG/issue4186) [#5444](https://github.com/microsoft/STL/pull/5444) `regex_traits::transform_primary` mistakenly detects `typeid` of a function * [LWG-4222](https://cplusplus.github.io/LWG/issue4222) [#5602](https://github.com/microsoft/STL/pull/5602) `expected` constructor from a single value missing a constraint * [LWG-4242](https://cplusplus.github.io/LWG/issue4242) [#5603](https://github.com/microsoft/STL/pull/5603) `ranges::distance` does not work with volatile iterators - Merged *proposed* resolutions for LWG issues (not yet accepted for the C++ Working Draft, but we've chosen to implement this speculatively): * [LWG-4270](https://cplusplus.github.io/LWG/issue4270) [#5572](https://github.com/microsoft/STL/pull/5572) Diagnose misuse of `std::projected::operator*` * [LWG-4273](https://cplusplus.github.io/LWG/issue4273) [#5578](https://github.com/microsoft/STL/pull/5578) Standard execution policy types should be conventional tag class types * [LWG-4303](https://cplusplus.github.io/LWG/issue4303) [#5603](https://github.com/microsoft/STL/pull/5603) `std::decay_t` in the specification of `ranges::distance` is problematic - Fixed bugs: * Fixed `regex`'s behavior: + For the `basic` and `grep` grammars to properly handle `^` caret characters. [#5165](https://github.com/microsoft/STL/pull/5165) + For the `basic` and `grep` grammars to properly handle `$` dollar characters. [#5362](https://github.com/microsoft/STL/pull/5362) + For the `basic` and `grep` grammars to make backreferences to unmatched capture groups fail to match anything, instead of matching the empty string `""`. [#5376](https://github.com/microsoft/STL/pull/5376) + For the `basic` and `grep` grammars to properly handle backslashes inside square-bracket character classes. [#5523](https://github.com/microsoft/STL/pull/5523) + For POSIX grammars to allow a `]` right square bracket at the beginning of a character range. [#5364](https://github.com/microsoft/STL/pull/5364) + For POSIX grammars to avoid resetting matched capture groups. [#5377](https://github.com/microsoft/STL/pull/5377) + For the `ECMAScript` grammar's `(?!pattern)` negative lookahead assertions to make capture groups within them always match nothing after the assertions succeed. [#5366](https://github.com/microsoft/STL/pull/5366) + For the `ECMAScript` grammar's `\b` word boundary assertion to not match the empty string `""` (and inversely for the `\B` negative word boundary assertion). [#5375](https://github.com/microsoft/STL/pull/5375) + For the `ECMAScript` grammar's `\c` escapes to require the following ControlLetter to be an ASCII alphabetic character. [#5524](https://github.com/microsoft/STL/pull/5524) - That is, only `\ca` through `\cz` and `\cA` through `\cZ` are allowed. + For the `ECMAScript` grammar to reset all capture groups to "unmatched" at the start of each repetition of a loop. [#5456](https://github.com/microsoft/STL/pull/5456) + For the `ECMAScript` grammar to reject bogus groups by throwing a `regex_error` with the code `regex_constants::error_badrepeat`, removing the non-Standard code `regex_constants::error_syntax` that was previously used. [#5542](https://github.com/microsoft/STL/pull/5542) - That is, only non-capture groups `(?:meow)` and positive/negative lookahead assertions `(?=meow)`/`(?!meow)` are allowed; other characters following `(?` are bogus. Notably, the C++ Standard doesn't support the lookbehind assertions `(?<=meow)`/`(?` to follow the locale's collation order when compiling with [`/Zc:wchar_t-`](https://learn.microsoft.com/en-us/cpp/build/reference/zc-wchar-t-wchar-t-is-native-type?view=msvc-170) (making `wchar_t` a non-Standard typedef for `unsigned short`) and linking to the STL dynamically (with `/MD` or `/MDd`). [#5361](https://github.com/microsoft/STL/pull/5361) * Fixed how `collate::do_transform()` handles wrongly encoded input. [#5431](https://github.com/microsoft/STL/pull/5431) * Fixed `collate::do_hash()` to return equal hashes for strings that collate as equivalent. [#5469](https://github.com/microsoft/STL/pull/5469) * Fixed `ranges::enable_view` to correctly report `false` for `ranges::view_interface` itself. [#5369](https://github.com/microsoft/STL/pull/5369) [#5407](https://github.com/microsoft/STL/pull/5407) * Fixed `` status functions to avoid failing for invalid paths when the current directory is a network path. [#5381](https://github.com/microsoft/STL/pull/5381) * Fixed compiler errors in `repeat_view`'s piecewise constructor for certain scenarios. [#5388](https://github.com/microsoft/STL/pull/5388) * Fixed compiler errors in `constexpr` `copy()` for `vector`. [#5347](https://github.com/microsoft/STL/pull/5347) + This fixed a regression that was introduced by [#3353](https://github.com/microsoft/STL/pull/3353) in VS 2022 17.9. * Fixed the `barrier` constructor's exception specification to be conditionally "strengthened", instead of unconditionally. [#5398](https://github.com/microsoft/STL/pull/5398) * Fixed heap-use-after-free bugs in our undocumented/quasi-supported `_HAS_EXCEPTIONS=0` mode when constructing `system_error`, `chrono::ambiguous_local_time`, and `chrono::nonexistent_local_time`. [#5406](https://github.com/microsoft/STL/pull/5406) * Fixed compiler errors when passing `volatile` ranges to `basic_string`'s `from_range` constructor and `append_range()`, `assign_range()`, `insert_range()`, and `replace_with_range()` member functions. [#5409](https://github.com/microsoft/STL/pull/5409) * Fixed `nth_element()` and `ranges::nth_element` to have worst-case linear complexity, instead of quadratic. [#5100](https://github.com/microsoft/STL/pull/5100) * Fixed compiler errors when passing iterators with unusual integer-class difference types to vectorized algorithms. [#5471](https://github.com/microsoft/STL/pull/5471) * Fixed `destroy()`, `destroy_at()`, `destroy_n()`, `ranges::destroy`, `ranges::destroy_at`, and `ranges::destroy_n` to destroy objects during constant evaluation even when they're trivially destructible. [#5449](https://github.com/microsoft/STL/pull/5449) * Fixed `num_get::do_get()` for `bool` to properly handle bad digit groupings. [#5476](https://github.com/microsoft/STL/pull/5476) * Fixed `thread::hardware_concurrency()` to correctly report the total number of logical processors when more than 64 are available, for both single-socket and multi-socket machines. [#5459](https://github.com/microsoft/STL/pull/5459) * Fixed ``'s `layout_stride::mapping::is_exhaustive()` to correctly handle unusual extents. [#5477](https://github.com/microsoft/STL/pull/5477) * Fixed `reverse_copy()` and `ranges::reverse_copy` being improperly vectorized for `pair` on x86 (where such `pair`s are 8 bytes). [#5528](https://github.com/microsoft/STL/pull/5528) + This fixed a regression that was introduced by [#804](https://github.com/microsoft/STL/pull/804) in VS 2019 16.8. * Fixed `chrono::zoned_time` to provide a fallback time zone abbreviation (of the form `"-05"` or `"+0530"`) when the system's code page can't represent the localized abbreviation that would normally be returned. [#5558](https://github.com/microsoft/STL/pull/5558) * Fixed `counting_semaphore::try_acquire_for()` to consistently use `steady_clock`. [#5575](https://github.com/microsoft/STL/pull/5575) * Silenced a static analysis warning C6510 emitted by the extremely unusual scenario of `basic_string`. [#5563](https://github.com/microsoft/STL/pull/5563) * Fixed compiler errors involving incomplete types in ``. [#5629](https://github.com/microsoft/STL/pull/5629) * Fixed occurrences of Clang 21's new `-Wcharacter-conversion` warning in `` by avoiding implicit conversions between `charN_t` types. [#5653](https://github.com/microsoft/STL/pull/5653) * Fixed integer overflow in `stable_sort()` and `ranges::stable_sort` when sorting huge inputs on x86. [#5677](https://github.com/microsoft/STL/pull/5677) + This affected 32-bit architectures with over a billion 1-byte elements. 64-bit architectures were immune. + This fix was backported to VS 2022 17.14.20. * Fixed `filesystem::temp_directory_path(error_code&)` to return an empty `filesystem::path` when an error is encountered. [#5570](https://github.com/microsoft/STL/pull/5570) - Improved performance: * Improved performance for `regex` matching: + When a `regex` starts with a `?` question mark quantifier or several alternatives, by avoiding quadratic complexity. [#5457](https://github.com/microsoft/STL/pull/5457) + When a `regex` starts with a `+` plus quantifier (or `{min,}` or `{min,max}` quantifiers requiring at least 1 repetition). [#5509](https://github.com/microsoft/STL/pull/5509) + When a `regex` contains no capture groups, by avoiding unnecessary allocations. [#5518](https://github.com/microsoft/STL/pull/5518) + For all `regex` patterns, by not generating unnecessary "if" nodes with a single branch. [#5539](https://github.com/microsoft/STL/pull/5539) + When a `regex` starts with positive/negative word boundary assertions `\b`/`\B` and lookahead assertions `(?=meow)`/`(?!meow)`. [#5576](https://github.com/microsoft/STL/pull/5576) + By calling `std::search()` internally. [#5586](https://github.com/microsoft/STL/pull/5586) + By avoiding unnecessary work in `regex_constants::collate` mode. [#5672](https://github.com/microsoft/STL/pull/5672) * Started using `[[msvc::no_unique_address]]` as a space optimization in several C++23 components. [#4960](https://github.com/microsoft/STL/pull/4960) * Added x64/x86 vectorized implementations of: + `basic_string::find_first_not_of()` and `basic_string::find_last_not_of()` for one character. [#5102](https://github.com/microsoft/STL/pull/5102) + `basic_string::find_first_not_of()` and `basic_string::find_last_not_of()` for multiple characters. [#5206](https://github.com/microsoft/STL/pull/5206) + `adjacent_find()` and `ranges::adjacent_find`. [#5331](https://github.com/microsoft/STL/pull/5331) + `unique()` and `ranges::unique`. [#5092](https://github.com/microsoft/STL/pull/5092) [#5363](https://github.com/microsoft/STL/pull/5363) + `search_n()` and `ranges::search_n` for small values of n. [#5352](https://github.com/microsoft/STL/pull/5352) + `remove_copy()`, `ranges::remove_copy`, `unique_copy()`, and `ranges::unique_copy`. [#5355](https://github.com/microsoft/STL/pull/5355) + `is_sorted_until()` and `ranges::is_sorted_until`. [#5420](https://github.com/microsoft/STL/pull/5420) [#5540](https://github.com/microsoft/STL/pull/5540) + `search()`, `ranges::search`, `default_searcher`, `find_end()`, and `ranges::find_end`, for 4-byte and 8-byte elements. [#5484](https://github.com/microsoft/STL/pull/5484) [#5519](https://github.com/microsoft/STL/pull/5519) - They were vectorized for 1-byte and 2-byte elements in VS 2022 17.13. + `rotate()` and `ranges::rotate`. [#5502](https://github.com/microsoft/STL/pull/5502) [#5525](https://github.com/microsoft/STL/pull/5525) * Improved the x64/x86 vectorized implementations of: + `reverse_copy()` and `ranges::reverse_copy`. [#5493](https://github.com/microsoft/STL/pull/5493) * Improved the performance of `ranges::find` for 2-byte elements on ARM64, matching `find()`'s behavior. [#5628](https://github.com/microsoft/STL/pull/5628) * Used Clang's builtin `__is_trivially_equality_comparable` to improve the performance of `equal()`, `ranges::equal`, and many vectorized algorithms for more types. [#5527](https://github.com/microsoft/STL/pull/5527) * Optimized `search_n()` and `ranges::search_n` for n=1 to internally call `find()` and `ranges::find`. [#5346](https://github.com/microsoft/STL/pull/5346) * Improved codegen for `has_single_bit()`, especially when `popcount()` intrinsics are unconditionally available. [#5367](https://github.com/microsoft/STL/pull/5367) [#5534](https://github.com/microsoft/STL/pull/5534) + For example, x86/x64 with [`/arch:AVX`](https://learn.microsoft.com/en-us/cpp/build/reference/arch-x64?view=msvc-170) and ARM64 can unconditionally use `popcount()` intrinsics. * Optimized `poisson_distribution`'s constructor by avoiding unnecessary work. [#5411](https://github.com/microsoft/STL/pull/5411) * Implemented an exponential speedup (yes, literally) for `minstd_rand` and `minstd_rand0`'s `discard()` member function. [#5412](https://github.com/microsoft/STL/pull/5412) * Improved `linear_congruential_engine` performance by using our modern internal implementation of 128-bit integers. [#5436](https://github.com/microsoft/STL/pull/5436) [#5473](https://github.com/microsoft/STL/pull/5473) * Significantly improved performance for `chrono::tzdb::locate_zone()` by using binary searches for time zone names. [#5548](https://github.com/microsoft/STL/pull/5548) * Improved `std::includes()` to have the same performance as `ranges::includes`. [#5543](https://github.com/microsoft/STL/pull/5543) [#5595](https://github.com/microsoft/STL/pull/5595) * Improved the performance of `count()` for `vector`. [#5640](https://github.com/microsoft/STL/pull/5640) - Enhanced behavior: * Used a new Clang compiler intrinsic to implement `is_scoped_enum`. [#5358](https://github.com/microsoft/STL/pull/5358) * Added debug checks for overlapping ranges in `replace_copy()`, `replace_copy_if()`, `reverse_copy()`, `rotate_copy()`, and their `ranges` counterparts. [#5495](https://github.com/microsoft/STL/pull/5495) * Improved ``'s debug checks in `layout_stride::mapping`'s constructor. [#5505](https://github.com/microsoft/STL/pull/5505) * Avoided compiler warnings in `vector::max_size()` with the compiler's upcoming implementation of Defect Report [P2280R4](https://wg21.link/P2280R4). [#5550](https://github.com/microsoft/STL/pull/5550) [#5566](https://github.com/microsoft/STL/pull/5566) * Updated several checks for precondition violations and impossible situations to use the STL's usual error reporting mechanism. [#5560](https://github.com/microsoft/STL/pull/5560) * Improved `regex` parsing to detect excessive recursion (caused by extreme numbers of non-capturing groups or lookahead assertions) and throw a `regex_error` with the code `regex_constants::error_stack`. [#5588](https://github.com/microsoft/STL/pull/5588) * Changed `` matching to use heap allocations for saved match state, slightly reducing stack pressure. [#5682](https://github.com/microsoft/STL/pull/5682) * Silenced CodeQL warnings. [#5625](https://github.com/microsoft/STL/pull/5625) * Silenced a new compiler warning C5291 throughout the STL. [#5645](https://github.com/microsoft/STL/pull/5645) - Improved debugger visualization: * Fixed an off-by-one mistake in the displayed year for `system_clock::time_point`. [#5389](https://github.com/microsoft/STL/pull/5389) * Updated the visualizer for `system_clock::time_point` to recognize the synonymous but slightly different type name emitted by Clang. [#5390](https://github.com/microsoft/STL/pull/5390) - Improved test coverage: * Updated our LLVM submodule, including new tests. [#5349](https://github.com/microsoft/STL/pull/5349) [#5467](https://github.com/microsoft/STL/pull/5467) [#5688](https://github.com/microsoft/STL/pull/5688) * Changed the benchmark build from `/O2 /Ob1` to [`/O2 /Ob2`](https://learn.microsoft.com/en-us/cpp/build/reference/ob-inline-function-expansion?view=msvc-170), producing more realistic and useful results. [#5370](https://github.com/microsoft/STL/pull/5370) * Added benchmarks for: + `fill()` and `fill_n()`. [#5400](https://github.com/microsoft/STL/pull/5400) + `reverse()` and `reverse_copy()`. [#5493](https://github.com/microsoft/STL/pull/5493) + The `count()` optimization for `vector`. [#5684](https://github.com/microsoft/STL/pull/5684) * Improved the consistency of how `normal_distribution` is used in benchmarks and tests. [#5404](https://github.com/microsoft/STL/pull/5404) * Increased the consistency of several benchmarks by adding allocators to control alignment. [#5443](https://github.com/microsoft/STL/pull/5443) * Updated the benchmarks to support being built with Clang. [#5533](https://github.com/microsoft/STL/pull/5533) * Updated an `iter_rvalue_reference_t` test in response to a compiler change. [#5378](https://github.com/microsoft/STL/pull/5378) * Fixed sporadic test failures by avoiding excessive compiler memory consumption. [#5383](https://github.com/microsoft/STL/pull/5383) * Improved the runtime performance of the major test for vectorized algorithms. [#5425](https://github.com/microsoft/STL/pull/5425) * Added more test coverage for `search_n()` and `ranges::search_n`. [#5439](https://github.com/microsoft/STL/pull/5439) [#5440](https://github.com/microsoft/STL/pull/5440) * Updated the test harness to properly detect the locale name `"Czech_Czechia.1250"`. [#5480](https://github.com/microsoft/STL/pull/5480) * Updated `source_location` test coverage to handle upcoming changes in the EDG front-end used for IntelliSense. [#5551](https://github.com/microsoft/STL/pull/5551) * Categorized the remaining `` test failures in the libcxx suite. [#5587](https://github.com/microsoft/STL/pull/5587) * Avoided/suppressed compiler warnings in tests. [#5654](https://github.com/microsoft/STL/pull/5654) [#5655](https://github.com/microsoft/STL/pull/5655) [#5656](https://github.com/microsoft/STL/pull/5656) [#5657](https://github.com/microsoft/STL/pull/5657) [#5676](https://github.com/microsoft/STL/pull/5676) * Worked around assertions in the `lerp()` test on ARM64. [#5687](https://github.com/microsoft/STL/pull/5687) - Improved documentation: * Clarified our machine-searchable SPDX-License-Identifier comments to properly describe how we used [Ryu](https://github.com/ulfjack/ryu) to implement ``. [#5401](https://github.com/microsoft/STL/pull/5401) * Fixed confusing comments around the control macro for vectorizing algorithms with floating-point types. [#5417](https://github.com/microsoft/STL/pull/5417) - Code cleanups: * Simplified the control flow in `ranges::search_n`. [#5343](https://github.com/microsoft/STL/pull/5343) * Simplified the implementation of `regex` quantifiers. [#5253](https://github.com/microsoft/STL/pull/5253) * Removed comments that were citing proposed resolutions for LWG issues, now that those issues have been officially resolved by the November 2024 and June 2025 meetings. [#5360](https://github.com/microsoft/STL/pull/5360) [#5584](https://github.com/microsoft/STL/pull/5584) * Removed compiler bug workarounds. [#5410](https://github.com/microsoft/STL/pull/5410) [#5580](https://github.com/microsoft/STL/pull/5580) [#5634](https://github.com/microsoft/STL/pull/5634) [#5661](https://github.com/microsoft/STL/pull/5661) [#5674](https://github.com/microsoft/STL/pull/5674) * Significantly cleaned up the implementation of x64/x86 vectorized algorithms. [#5429](https://github.com/microsoft/STL/pull/5429) [#5450](https://github.com/microsoft/STL/pull/5450) [#5485](https://github.com/microsoft/STL/pull/5485) [#5532](https://github.com/microsoft/STL/pull/5532) * Removed an unnecessarily verbose internal macro. [#5475](https://github.com/microsoft/STL/pull/5475) * Removed unnecessary code for constant evaluation in `char_traits::assign()`. [#5488](https://github.com/microsoft/STL/pull/5488) * Various cleanups (described in detail in the PRs, not repeated here). [#5498](https://github.com/microsoft/STL/pull/5498) [#5500](https://github.com/microsoft/STL/pull/5500) [#5541](https://github.com/microsoft/STL/pull/5541) [#5565](https://github.com/microsoft/STL/pull/5565) [#5636](https://github.com/microsoft/STL/pull/5636) * Restructured code to `if constexpr (condition) { ... } else { ... }`, improving clarity and avoiding unreachable code. [#5643](https://github.com/microsoft/STL/pull/5643) * Simplified how `` initializes a `tm` struct. [#5662](https://github.com/microsoft/STL/pull/5662) - Infrastructure improvements: * Added ARM64EC stages to Azure Pipelines. [#5492](https://github.com/microsoft/STL/pull/5492) [#5517](https://github.com/microsoft/STL/pull/5517) [#5521](https://github.com/microsoft/STL/pull/5521) + Including an Early Build, benchmarks, and tests. * Improved code format validation to report line numbers in error messages. [#5559](https://github.com/microsoft/STL/pull/5559) * Updated dependencies. [#5370](https://github.com/microsoft/STL/pull/5370) [#5410](https://github.com/microsoft/STL/pull/5410) [#5478](https://github.com/microsoft/STL/pull/5478) [#5512](https://github.com/microsoft/STL/pull/5512) [#5530](https://github.com/microsoft/STL/pull/5530) [#5580](https://github.com/microsoft/STL/pull/5580) [#5641](https://github.com/microsoft/STL/pull/5641) [#5659](https://github.com/microsoft/STL/pull/5659) [#5674](https://github.com/microsoft/STL/pull/5674) + Updated build compiler to VS 2022 17.14.12 Preview 1. + Updated CMake to 3.31 (now required). + Updated Google Benchmark to 1.9.4. + Updated Python to 3.13.6. + Updated to Windows 11 SDK 26100. This is now required for building and testing the STL, but not for using it. - Updated `_MSVC_STL_UPDATE` and `_MSVC_STL_VERSION`. [#5385](https://github.com/microsoft/STL/pull/5385) [#5464](https://github.com/microsoft/STL/pull/5464) [#5568](https://github.com/microsoft/STL/pull/5568) [#5633](https://github.com/microsoft/STL/pull/5633) [#5664](https://github.com/microsoft/STL/pull/5664) # Older Versions - [VS 2022 Changelog][] - [VS 2019 Changelog][]