New
Unclaimed project
Are you a maintainer of STL? Claim this project to take control of your public changelog and roadmap.
Changelog
MSVC's implementation of the C++ Standard Library.
Last updated 1 day ago
codecvt<charN_t, char8_t, mbstate_t> incorrectly added to localeenumerate_view may invoke UB for sized common non-forward underlying rangesstd::basic_string_view comparison operators are overspecifiedranges::to's recursion branch may be ill-formedcommon_view::begin/end are missing the simple-view checklazy_split_view::outer-iterator::value_type should not provide default constructorcontainer-insertable checks do not match what container-inserter doessingle_view should provide emptystd::views::repeat does not decay the argumentrepeat_view should repeat the viewcondition_variable::wait_until() and condition_variable_any::wait_until() to consistently use the given time_point's clock type, instead of also depending on the system clock. This also fixed condition_variable::wait_for() to consistently use steady_clock. #4457<format> to always perform compile-time format string checking for wchar_t, even when the narrow execution character set doesn't support it. #4459constexpr basic_string interacted with the undocumented compiler option /d1initall. #4474atomic_ref for 16-byte objects to correctly report is_lock_free() and is_always_lock_free on x64 (when the optional mode _STD_ATOMIC_ALWAYS_USE_CMPXCHG16B is defined to be 1) and ARM64 (always). #4478ranges::find with unreachable_sentinel as it was fundamentally incompatible with ASan (Address Sanitizer). #4486
ranges::find_last for certain combinations of value and element types. #4561
/ZI compiler option (debug info for Edit and Continue) is used. #4487
pair and tuple machinery. #4488make_from_tuple() to properly implement LWG-3528 with a constraint instead of a static_assert. #4528<cmath>'s classification functions fpclassify(), isfinite(), isinf(), isnan(), isnormal(), and signbit(). #4537is_trivial to correctly handle unusual types. #4576__vectorcall for ARM64EC, where it is not yet supported. #4600std.ixx to include <intrin.h> in the Global Module Fragment, fixing compiler errors with import std; in certain scenarios. #4626formatter calls basic_format_parse_context::next_arg_id() with an empty format-spec. #4640<expected> in /permissive mode. #4658
/permissive mode is discouraged, it's currently supported for most STL components.expected's constructors in certain scenarios. #4664pair's self-swap() behavior to follow the Standard by self-swapping its elements. #4674atomic<void*> and atomic_ref<void*> to provide difference_type. #4689find_first_of() and ranges::find_first_of. #4466 #4557 #4563 #4587 #4623mismatch() and ranges::mismatch. #4495 #4538 #4584replace() and ranges::replace for 32-bit and 64-bit elements. #4554 #4584lexicographical_compare(), ranges::lexicographical_compare, and lexicographical_compare_three_way(). #4552<cmath>'s floating-point classification and comparison
functions: #4612
isfinite(), isinf(), isnan(), isnormal()isgreater(), isgreaterequal(), isless(), islessequal(), islessgreater(), isunordered()normal_distribution::operator()(engine, param) by avoiding unnecessarily recomputing coefficients. #4618<mdspan> throughput by using short-circuiting conjunction_v instead of fold expressions. #4559<string_view> throughput by no longer dragging in most of <string>'s contents. #4633formatter<UDT>::format() isn't const. #4461get<T>(tuple<Types...>) when T doesn't occur exactly once in Types. #4578ranges::to is unable to construct the requested result. #4608[[nodiscard("reason")]] messages for empty(). #4572static_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). #4585basic_format_arg::handle and basic_format_context to be private. #4489stdext::checked_array_iterator, stdext::make_checked_array_iterator(), stdext::unchecked_array_iterator, and stdext::make_unchecked_array_iterator().basic_istream's ipfx()/isfx() and basic_ostream's opfx()/osfx() member functions.discard_block, linear_congruential, mersenne_twister, subtract_with_carry, uniform_int, and uniform_real.<cvt/meow> subdirectory of headers, shrinking VS installations by 4.8 MB across 78 files. #4458<experimental/meow> headers that provided std::experimental::erase()/erase_if(). #4470_FPOSOFF macro and the non-Standard std::fpos::seekpos() member function. #4606lower_bound()/upper_bound() member functions from the unordered associative containers. #4607swap_ranges(). #4589mismatch() when testing lexicographical_compare() and lexicographical_compare_three_way(). #4656<filesystem> test, including its coverage of rename() and how it generates names for temporary files and directories. #4665libcxx test suite. #4698<format>. #4469condition_variable is implemented as a wrapper around the Windows API CONDITION_VARIABLE. #4545inline from constexpr variable templates. #4546
constexpr variables, only primary templates and partial specializations no longer need to be marked as inline; explicit specializations and ordinary non-templates still need to be marked as inline.chrono::tzdb::version to activate the Named Return Value Optimization. #4577static_assert. #4588static_assert(false) as permitted by CWG-2518. #4591if constexpr. #4610char_traits::assign() by removing unnecessary codepaths for constant evaluation. #4613static_assert macros, which expand to nothing outside of the STL's test suites. #4624ranges::stable_sort to use iter_value_t instead of an internal helper. #4628in_range<T>() more and numeric_limits<T>::min()/max() less. #4634minmax() family for 64-bit elements. #4661