New
VS 2022 17.11
- Merged C++26 features:
- Merged partial C++23 features:
- Merged LWG issue resolutions:
- LWG-3767 #4542
codecvt<charN_t, char8_t, mbstate_t>incorrectly added to locale - LWG-3919 #4526
enumerate_viewmay invoke UB for sized common non-forward underlying ranges - LWG-3950 #4510
std::basic_string_viewcomparison operators are overspecified - LWG-3984 #4543
ranges::to's recursion branch may be ill-formed - LWG-4012 / are missing the check
- LWG-3767 #4542
- Fixed bugs:
- Fixed
condition_variable::wait_until()andcondition_variable_any::wait_until()to consistently use the giventime_point's clock type, instead of also depending on the system clock. This also fixedcondition_variable::wait_for()to consistently usesteady_clock. #4457 - Fixed
<format>to always perform compile-time format string checking forwchar_t, even when the narrow execution character set doesn't support it. #4459 - Fixed compiler errors when
constexpr basic_stringinteracted with the undocumented compiler option/d1initall. #4474 - Fixed
atomic_reffor 16-byte objects to correctly reportis_lock_free()andis_always_lock_freeon x64 (when the optional mode_STD_ATOMIC_ALWAYS_USE_CMPXCHG16Bis defined to be1) and ARM64 (always). #4478 - Removed the vectorized implementation of
ranges::findwithunreachable_sentinelas it was fundamentally incompatible with ASan (Address Sanitizer). #4486- This was introduced by #2434 in VS 2022 17.3.
- Fixed
- Improved performance:
- Helped the compiler auto-vectorize:
- Added vectorized implementations of:
- Improved throughput:
- Slightly improved
<mdspan>throughput by using short-circuitingconjunction_vinstead of fold expressions. #4559 - Refactored floating-point machinery, improving throughput by reducing inclusion of various headers. #4615
- Improved
<string_view>throughput by no longer dragging in most of<string>'s contents. #4633
- Slightly improved
- Improved diagnostics:
- Improved compiler error messages when
formatter<UDT>::format()isn'tconst. #4461 - Massively improved the compiler error messages for
get<T>(tuple<Types...>)whenTdoesn't occur exactly once inTypes. #4578 - Significantly improved compiler error messages when
ranges::tois unable to construct the requested result. #4608
- Improved compiler error messages when
- Enhanced behavior:
- To reduce risk, the STL no longer attempts to activate vectorized implementations of algorithms for ancient processors that support SSE2 but not SSE4.2. #4550
- This consolidated the STL's levels of vectorization to none, SSE4.2, and AVX2.
- This also slightly improved performance (for non-ancient processors) by taking advantage of newer instructions in codepaths that previously restricted themselves to SSE2.
- Added precondition checking in debug mode to:
- Improved the wording of
[[nodiscard("reason")]]messages forempty(). #4572 - Extended C++20's
static_assert(is_clock_v<Clock>)enforcement for various codepaths to C++14/17 (with internal machinery;is_clock_vitself remains guarded by C++20 mode). #4585 - Changed the internal constructors of
basic_format_arg::handleandbasic_format_contextto beprivate. #4489 - Deprecation warnings for several non-Standard extensions are now emitted in all Standard modes, not just C++17 and later. These extensions will be removed in the future; you have been warned:
- To reduce risk, the STL no longer attempts to activate vectorized implementations of algorithms for ancient processors that support SSE2 but not SSE4.2. #4550
- Removed non-Standard code:
- Deleted the
<cvt/meow>subdirectory of headers, shrinking VS installations by 4.8 MB across 78 files. #4458 - Deleted the
<experimental/meow>headers that providedstd::experimental::erase()/erase_if(). #4470 - Removed the non-Standard
_FPOSOFFmacro and the non-Standardstd::fpos::seekpos()member function. #4606 - Removed the non-Standard
lower_bound()/upper_bound()member functions from the unordered associative containers. #4607
- Deleted the
- Improved test coverage:
- Added benchmarks for vectorized
swap_ranges(). #4589 - Added a workaround for an ASan failure in an ancient STL test. #4652
- Reduced the execution time of the vectorized algorithms test by using the result of
mismatch()when testinglexicographical_compare()andlexicographical_compare_three_way(). #4656 - Improved the
<filesystem>test, including its coverage ofrename()and how it generates names for temporary files and directories. #4665 - Re-enabled tests that were previously skipped in the
libcxxtest suite. #4698 - Updated our LLVM submodule, including new tests. #4702
- Added benchmarks for vectorized
- Code cleanups:
- Removed compiler bug workarounds. #4475 #4576
- Various cleanups (described in detail in the PRs, not repeated here). #4465 #4490 #4493
- Improved the script for downloading Unicode data files when updating
<format>. #4469 - Consistently centralized how algorithms invoke their vectorized implementations. #4544
- Simplified how
condition_variableis implemented as a wrapper around the Windows APICONDITION_VARIABLE. #4545 - Removed
inlinefromconstexprvariable templates. #4546
- Infrastructure improvements:
- Overhauled our Azure Pipelines machinery: #4594 #4687
- Introduced "Early Build" stages to quickly find compiler errors when building the STL.
- Improved the reliability of the submodule checkout task.
- Improved how clang-format diffs are uploaded and logged.
- Updated dependencies. #4475 #4492 #4576 #4568 #4594 #4687
- Updated build compiler to VS 2022 17.11 Preview 1.
- Updated to Windows 11 SDK 22621. This is now required for building and testing the STL, but not for using it.
- Updated CUDA to 12.4.0 (now required).
- Updated Python to 3.12.3.
- Overhauled our Azure Pipelines machinery: #4594 #4687
- Updated
_MSVC_STL_UPDATE. #4467 #4556 #4655