vs-2022-17.11
版本发布时间: 2024-08-15 19:47:14
microsoft/STL最新发布版本:vs-2022-17.11(2024-08-15 19:47:14)
- 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_view
may invoke UB for sized common non-forward underlying ranges -
LWG-3950 #4510
std::basic_string_view
comparison operators are overspecified -
LWG-3984 #4543
ranges::to
's recursion branch may be ill-formed -
LWG-4012 #4529
common_view::begin
/end
are missing thesimple-view
check -
LWG-4013 #4530
lazy_split_view::
outer-iterator
::value_type
should not provide default constructor -
LWG-4016 #4539
container-insertable
checks do not match whatcontainer-inserter
does -
LWG-4035 #4525
single_view
should provideempty
-
LWG-4053 #4685 Unary call to
std::views::repeat
does not decay the argument -
LWG-4054 #4540 Repeating a
repeat_view
should repeat the view
-
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_string
interacted with the undocumented compiler option/d1initall
. #4474 - Fixed
atomic_ref
for 16-byte objects to correctly reportis_lock_free()
andis_always_lock_free
on x64 (when the optional mode_STD_ATOMIC_ALWAYS_USE_CMPXCHG16B
is defined to be1
) and ARM64 (always). #4478 - Removed the vectorized implementation of
ranges::find
withunreachable_sentinel
as it was fundamentally incompatible with ASan (Address Sanitizer). #4486- This was introduced by #2434 in VS 2022 17.3.
- Fixed incorrect results from the vectorized implementation of
ranges::find_last
for certain combinations of value and element types. #4561- This fixed a regression that was introduced by #3925 in VS 2022 17.9.
- Fixed the STL to avoid emitting the off-by-default warning C4365 (signed/unsigned mismatch) when the
/ZI
compiler option (debug info for Edit and Continue) is used. #4487- These warnings were most noticeable when building the Standard Library Modules, but they were also emitted by classic includes.
- Fixed the STL to avoid emitting the off-by-default warning C5246 (brace elision). #4527
- Fixed compiler errors involving incomplete types in:
-
pair
andtuple
machinery. #4488
-
- Fixed
make_from_tuple()
to properly implement LWG-3528 with a constraint instead of astatic_assert
. #4528 - Added integral overloads for
<cmath>
's classification functionsfpclassify()
,isfinite()
,isinf()
,isnan()
,isnormal()
, andsignbit()
. #4537 - Fixed
is_trivial
to correctly handle unusual types. #4576 - Avoided mentioning
__vectorcall
for ARM64EC, where it is not yet supported. #4600 - Fixed
std.ixx
to include<intrin.h>
in the Global Module Fragment, fixing compiler errors withimport std;
in certain scenarios. #4626 - Fixed compiler errors when a user-defined
formatter
callsbasic_format_parse_context::next_arg_id()
with an empty format-spec. #4640 - Fixed compiler errors when using
<expected>
in/permissive
mode. #4658-
Note: While
/permissive
mode is discouraged, it's currently supported for most STL components.
-
Note: While
- Fixed compiler errors when inheriting
expected
's constructors in certain scenarios. #4664 - Fixed
pair
's self-swap()
behavior to follow the Standard by self-swapping its elements. #4674 - Fixed
atomic<void*>
andatomic_ref<void*>
to providedifference_type
. #4689
- Fixed
- Improved performance:
- Helped the compiler auto-vectorize:
- Added vectorized implementations of:
-
find_first_of()
andranges::find_first_of
. #4466 #4557 #4563 #4587 #4623 -
mismatch()
andranges::mismatch
. #4495 #4538 #4584 -
replace()
andranges::replace
for 32-bit and 64-bit elements. #4554 #4584 -
lexicographical_compare()
,ranges::lexicographical_compare
, andlexicographical_compare_three_way()
. #4552
-
- Further improved the vectorized implementations of:
- Used Clang builtins to improve the performance of
<cmath>
's floating-point classification and comparison functions: #4612- Classification:
isfinite()
,isinf()
,isnan()
,isnormal()
- Comparison:
isgreater()
,isgreaterequal()
,isless()
,islessequal()
,islessgreater()
,isunordered()
- Classification:
- Improved
normal_distribution::operator()(engine, param)
by avoiding unnecessarily recomputing coefficients. #4618
- Improved throughput:
- Slightly improved
<mdspan>
throughput by using short-circuitingconjunction_v
instead 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...>)
whenT
doesn't occur exactly once inTypes
. #4578 - Significantly improved compiler error messages when
ranges::to
is 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_v
itself remains guarded by C++20 mode). #4585 - Changed the internal constructors of
basic_format_arg::handle
andbasic_format_context
to 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: #4605
-
stdext::checked_array_iterator
,stdext::make_checked_array_iterator()
,stdext::unchecked_array_iterator
, andstdext::make_unchecked_array_iterator()
. -
basic_istream
'sipfx()
/isfx()
andbasic_ostream
'sopfx()
/osfx()
member functions. -
discard_block
,linear_congruential
,mersenne_twister
,subtract_with_carry
,uniform_int
, anduniform_real
.
-
- 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
_FPOSOFF
macro 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
libcxx
test 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_variable
is implemented as a wrapper around the Windows APICONDITION_VARIABLE
. #4545 - Removed
inline
fromconstexpr
variable templates. #4546- This became possible after all of our supported compilers implemented CWG-2387. Note that for
constexpr
variables, only primary templates and partial specializations no longer need to be marked asinline
; explicit specializations and ordinary non-templates still need to be marked asinline
.
- This became possible after all of our supported compilers implemented CWG-2387. Note that for
- Changed machinery for updating
chrono::tzdb::version
to activate the Named Return Value Optimization. #4577 - Updated tests to use C++17 terse
static_assert
. #4588 - Simplified function templates to use
static_assert(false)
as permitted by CWG-2518. #4591 - Simplified debug checks for comparison function objects by using
if constexpr
. #4610 - Simplified
char_traits::assign()
by removing unnecessary codepaths for constant evaluation. #4613 - Changed checks for damaged logic in the STL itself to use internal
static_assert
macros, which expand to nothing outside of the STL's test suites. #4624 - Simplified
ranges::stable_sort
to useiter_value_t
instead of an internal helper. #4628 - Changed the STL to use
in_range<T>()
more andnumeric_limits<T>::min()
/max()
less. #4634 - Replaced SFINAE with concepts in C++20-and-later code. #4637
- Simplified the vectorized implementation of the
minmax()
family for 64-bit elements. #4661 - Modernized our usage of Google Benchmark. #4662
- 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.
- Updated Boost.Math to 1.85.0. #4599
- Updated Google Benchmark to 1.8.4. #4694
- Overhauled our Azure Pipelines machinery: #4594 #4687
- Updated
_MSVC_STL_UPDATE
. #4467 #4556 #4655