ReleaseMicrosoftMicrosoftpublished Nov 14, 2025seen 1d

microsoft/STL msvc-build-tools-14.50

microsoft/STL

Open original ↗

Captured source

source ↗
published Nov 14, 2025seen 1dcaptured 14hhttp 200method plain

MSVC Build Tools 14.50

Repository: microsoft/STL

Tag: msvc-build-tools-14.50

Published: 2025-11-14T23:38:25Z

Prerelease: no

Release notes: 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 #5496
  • Improved the performance of STL Hardening by using the MSVC `__fastfail` intrinsic that was added in Windows 8, and the Clang `__builtin_verbose_trap` intrinsic. #5433 #5458
  • Simplified the `` implementation by unconditionally calling APIs that were added in Windows 8. #5434
  • Windows 10 / Server 2016 are our minimum supported operating systems. #5510
  • The STL no longer supports targeting 32-bit ARM. #5594
  • Merged C++26 features:
  • P0472R3 #5382 Put monostate In ``
  • P3223R2 #5604 Making istream::ignore() Less Surprising
  • Merged *partial* C++26 features:
  • P3697R1 #5650 Minor Additions To Standard Library Hardening
  • Merged LWG issue resolutions:
  • LWG-2503 #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 \[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 #5444 regex_traits::transform_primary mistakenly detects typeid of a function
  • LWG-4222 #5602 expected constructor from a single value missing a constraint
  • LWG-4242 #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 #5572 Diagnose misuse of std::projected::operator*
  • LWG-4273 #5578 Standard execution policy types should be conventional tag class types
  • LWG-4303 #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 + For the basic and grep grammars to properly handle $ dollar characters. #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 + For the basic and grep grammars to properly handle backslashes inside square-bracket character classes. #5523 + For POSIX grammars to allow a ] right square bracket at the beginning of a character range. #5364 + For POSIX grammars to avoid resetting matched capture groups. #5377 + For the ECMAScript grammar's (?!pattern) negative lookahead assertions to make capture groups within them always match nothing after the assertions succeed. #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 + For the ECMAScript grammar's \c escapes to require the following ControlLetter to be an ASCII alphabetic character. #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 + 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

  • 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 (? to follow the locale's collation order when compiling with `/Zc:wchar_t-` (making wchar_t a non-Standard typedef for unsigned short) and linking to the STL dynamically (with /MD or /MDd). #5361
  • Fixed how collate::do_transform() handles wrongly encoded input.…

Excerpt shown — open the source for the full document.