New
VS 2022 17.12
- Merged C++26 features:
- P0952R2 #4740 #4850 A New Specification For
generate_canonical() - P2407R5 #4743 Freestanding Library: Partial Classes
- P2833R2 #4743 Freestanding Library:
inoutexpectedspan - P2968R2 #4777 Make
std::ignoreA First-Class Object - P2997R1 #4816 Removing The Common Reference Requirement From The Indirectly Invocable Concepts
- P0952R2 #4740 #4850 A New Specification For
- Merged C++23 features:
- Merged LWG issue resolutions:
- LWG-3944 #4784 Formatters converting sequences of
charto sequences ofwchar_t - LWG-4061 #4758 Should
std::basic_format_contextbe default-constructible/copyable/movable? - LWG-4074 #4814
compatible-joinable-rangesis underconstrained - LWG-4083 #4786
views::as_rvalueshould reject non-input ranges - LWG-4096 should be rejected
- LWG-3944 #4784 Formatters converting sequences of
- Merged proposed resolutions for LWG issues (not yet accepted for the C++ Working Draft, but we've chosen to implement this speculatively):
- Fixed bugs:
- Fixed static analysis warning C26818 "Switch statement does not cover all cases. Consider adding a 'default' label (es.79)." #4715
- Note: The STL has always attempted to be
/W4 /analyzeclean, but does not yet attempt to be clean with respect to all additional static analysis rulesets.
- Note: The STL has always attempted to be
- Fixed
atomic_ref::is_lock_free()on x64 to returntruefor 1, 2, 4, 8, and 16 bytes only. #4729 - Fixed
uniform_real_distribution<RealType>{min, max}to stay within the inclusive-exclusive range[min, max)and never generate themaxvalue exactly. #4740 - Fixed
filesystem::weakly_canonical()to avoid failing on Windows 11 24H2 in certain scenarios. #4844 - Fixed
condition_variable_any::wait_for()to consistently usesteady_clock. #4755 - Removed a broken and useless visualizer for
ranges::view_interface. #4835
- Fixed static analysis warning C26818 "Switch statement does not cover all cases. Consider adding a 'default' label (es.79)." #4715
- Improved performance:
- Overhauled
condition_variableandcondition_variable_any, improving their performance and simplifying their implementation. #4720- As a result,
condition_variable,timed_mutex, andrecursive_timed_mutexare now trivially destructible.
- As a result,
- Improved the performance of
search(),find_end(), and theirrangesforms by removing calls tomemcmp()that were surprisingly harmful. #4654 #4753 - Improved the ARM64 performance of
popcount()by using new compiler intrinsics. #4695 #4733 - Further improved the vectorized implementations of:
- Overhauled
- Improved throughput:
- Improved
<queue>and<stack>throughput by dragging in fewer headers. #4707
- Improved
- Enhanced behavior:
- P0608R3 Improving
variant's Converting Constructor/Assignment is now unconditionally active (i.e. in C++17 mode and above), instead of being restricted to C++20 mode and above. #4713- This C++20 behavioral change was originally implemented by #1629 in VS 2019 16.10. While it can have source-breaking impact, it generally has highly desirable effects.
- Changed the machinery for copying
map/setnodes to use scope guards instead ofthrow;, making debugging easier when exceptions are thrown. #4749 - Added debug checks to
gcd()andlcm()for precondition violations. #4776 - Added "lifetimebound" attributes to
min,max,clamp,ranges::min,ranges::max, andranges::clamp, allowing MSVC code analysis and Clang-Wdanglingto detect dangling references in improper usage. #4838 - Updated the precondition check in
vector::pop_back()to be guarded by_CONTAINER_DEBUG_LEVEL.
- P0608R3 Improving
- Improved debugger visualization:
- Improved test coverage:
- Updated LLVM-derived test coverage for
<any>,<optional>, and<variant>. #4713 - Properly tested the resolution of LWG-4053 "Unary call to
std::views::repeatdoes not decay the argument". #4748 - Improved the benchmarks for
bitset::to_string(). #4817 - Updated our LLVM submodule, including new tests. #4862 #4910
- Re-enabled tests that were previously skipped in the
libcxxtest suite. #4721 #4732 #4911
- Updated LLVM-derived test coverage for
- Code cleanups:
- Removed compiler bug workarounds. #4725 #4782 #4889
- Various cleanups (described in detail in the PRs, not repeated here). #4724 #4900 #4920
- Replaced SFINAE with concepts in C++20-and-later code. #4718 #4819
- Removed a significant amount of unused code calling
GetCurrentPackageId. #4742 - Simplified how
ranges::equalcompares sizes.
- Reverted change:
- Infrastructure improvements:
- Build system improvements:
- Added
/Zc:preprocessorto build the STL with the conformant preprocessor. #4886 - Improved how CMake searches for the clang-format executable. #4888
- Added
- Updated
_MSVC_STL_UPDATE. #4706 #4708 #4754 #4872