VS 2019 16.10
StephanTLavavej
released this
09 Mar 05:22
·
1563 commits
to main
since this release
- The STL is C++20 feature complete.
- Merged C++20 features:
- P0053R7 #1564
<syncstream>
- P0753R2
osyncstream
Manipulators
- P0753R2
- P0355R7
<chrono>
Calendars And Time Zones:- #323 implemented calendars.
- #1789 implemented new clocks, leap seconds, time zones, and parsing.
- #1870 implemented
<chrono>
'sformat()
support (viaformatter
specializations) and remainingoperator<<()
overloads, completing this feature. - While the STL generally provides all features on all supported versions of Windows, leap seconds and time zones (which change over time) require OS support that was added to Windows 10. Specifically, updating the leap second database requires Windows 10 version 1809 or later, and time zones require
icu.dll
which is provided by Windows 10 version 1903/19H1 or later. This applies to both client and server OSes; note that Windows Server 2019 is based on Windows 10 version 1809.
- P0408R7 #919 Efficient Access To
basic_stringbuf
's Buffer - P0466R5 #1575 Layout-Compatibility And Pointer-Interconvertibility Traits
- Initially supported for MSVC only; will be supported for Clang after LLVM-48860 is resolved.
- P0475R1 #1668 Guaranteed Copy Elision For Piecewise Construction
- P0591R4 #1668 Utility Functions For Uses-Allocator Construction
- P0608R3 #1629 Improving
variant
's Converting Constructor/Assignment - P0645R10 #1821 #1834 #1803 #1853 #1862 #1867 #1851 #1875
<format>
Text Formatting - P0784R7 #1369 #1546 Library Support For More
constexpr
Containers - P0896R4 Ranges, completed with the final PRs:
- P0980R1 #1502
constexpr
std::string
- Initially supported for MSVC only; will be supported for Clang after LLVM-48606 is resolved.
- P1004R2 #1407 #1690 #1698
constexpr
std::vector
- Initially supported for MSVC only; see note for
constexpr
std::string
.
- Initially supported for MSVC only; see note for
- P1208R6 #664
<source_location>
- Initially supported for MSVC only; will be supported for Clang after it implements
consteval
(see Clang's C++20 status).
- Initially supported for MSVC only; will be supported for Clang after it implements
- P1502R1 #1567 #1692 Standard Library Header Units
- Initially supported for MSVC only; will be supported for Clang after it implements C++20 modules (see Clang's C++20 status).
- P1614R2 #1602 #1678 Adding Spaceship
<=>
To The Library
- P0053R7 #1564
- Merged LWG issue resolutions:
- Fixed bugs:
- Fixed regex character class behavior with
regex::icase
. #1503 - Fixed compiler errors when calling
std::equal()
with user-defined contiguous iterators. #1527 - Fixed
boolalpha
extraction to be case-sensitive again. #1543 #1570 (This was a regression in VS 2019 16.8 caused by #1168.) - Fixed a compiler error when calling
std::fill()
withvolatile byte*
. #1557 - Fixed
ranges::unique
to correctly handle inputs that are already unique. #1561 - Fixed compiler errors, specific to Clang targeting ARM64, in
<atomic>
and<bit>
, related to compiler intrinsics. #1505 - Fixed C++20 mode to remove old
std::allocator
members that were deprecated in C++17. (As usual, fine-grained and coarse-grained escape hatches are available for this removal.) #1585 - Fixed an inaccurate approximation in
binomial_distribution
. #1531 - Fixed incorrect
min
/max
values for several<random>
distributions. #1601 - Fixed incorrect behavior in
gamma_distribution::param_type::operator==
. #1601 - Fixed a regression in VS 2019 16.6 caused by #423, where
__declspec(dllexport)
ing a class derived fromunordered_map
orunordered_set
would fail to compile with astatic_assert
. #1639 - Fixed compiler errors in
ranges::uninitialized_copy
,ranges::uninitialized_copy_n
,ranges::uninitialized_move
, andranges::uninitialized_move_n
when attempting to usememcpy
for efficiency. #1548 - Fixed incorrect behavior in
ranges::uninitialized_value_construct
andranges::uninitialized_value_construct_n
when attempting to usememset
for efficiency. #1700 - Fixed
year_month_day_last::day()
to return a valid-but-unspecified value for!ok()
dates, as required by the Standard. #1663 - Fixed a regression in VS 2019 16.7 caused by #309, where
<memory>
would fail to compile with/std:c++latest
/Zc:alignedNew-
. #1689 - Fixed incorrect behavior in
get_time()
. #1620- Format specifications without delimiters are now correctly handled, even when a field is all-zero. For example,
"19700405T000006"
can now be parsed with"%Y%m%dT%H%M%S"
. - Literal matching (outside of
'%'
conversion specifications) is now case-insensitive. - If the stream ends during literal matching,
ios_base::eofbit | ios_base::failbit
is now set. - Incomplete conversion specifications (e.g.
'%'
appearing as the last character of a format specification) now result inios_base::failbit
instead of literal matching. - The seconds field now permits
60
to handle leap seconds.
- Format specifications without delimiters are now correctly handled, even when a field is all-zero. For example,
- Fixed compiler errors in
ranges::uninitialized_copy
andranges::uninitialized_move
when attempting to usememcpy
for efficiency. #1713 - Fixed compiler errors where the
ranges::uninitialized_meow()
algorithms assumed that<algorithm>
was included; now they can be called after including only<memory>
. #1832 - Fixed an off-by-default truncation warning in
<complex>
(warning C5219: implicit conversion from'const int'
to'const float'
, possible loss of data). #1722 - Fixed compiler errors in
make_shared
andallocate_shared
withnoexcept(false)
destructors. #1736 - Fixed compiler errors in an advanced scenario for Standard Library Header Units: using the IDE's build system to perform "dependency scanning" in addition to automatic translation of
#include
toimport
. #1781 - Fixed a regression in VS 2019 16.9 caused by #1336, where
<cmath>
's usage of new compiler intrinsics inceil
,copysign
,floor
,round
, andtrunc
would fail to compile with CUDA and the Intel C++ Compiler. #1886- Also backported to VS 2019 16.9.7.
- Will appear in VS 2019 16.11 Preview 2 (but not 16.11 Preview 1).
- Note: The Intel C++ Compiler remains unsupported by MSVC.
- Fixed regex character class behavior with
- Improved performance:
countr_zero()
andcountr_one()
in<bit>
are now faster foruint8_t
anduint16_t
. #1540atomic
locks on x86/x64 now use the_mm_pause
intrinsic with increasing back-off. #1146- Slightly optimized
<charconv>
's integerto_chars()
for the bases 3, 5, 6, 7, and 9. #1622 - Significantly optimized
<chrono>
's conversions betweenyear_month_day
andsys_days
. #1634 #1646 - Extended
std
algorithm optimizations tostd::ranges
algorithms and generalized those optimizations from pointers to contiguous iterators. #1433 #1772
- Enhanced behavior:
- Added
header-units.json
, a file that will tell the compiler which headers are eligible to be automatically treated as header units at the user's request. (That is, there will be a compiler option allowing#include <vector>
to be treated asimport <vector>;
without changing the source code.) #1545 - Added
[[nodiscard]]
to several member functions in<hash_map>
and<hash_set>
, even though these non-Standard headers are deprecated and will be removed soon. #1574 - Added
static_assert(is_clock_v<Clock>);
as required by N4878 [thread.req.paramname]/1. #1687 <coroutine>
is now supported in C++14 mode and C++17 mode; the new/await:strict
compiler option activates this "downlevel" support. #1730<coroutine>
remains supported in C++20 mode with no additional compiler options.
- Added the STL's visualizers to this repo, see
stl/debugger/STL.natvis
. #1720 - Generalized
<complex>
's 80-bitlong double
detection logic to work with Clang in addition to the Intel C++ Compiler. #1728- Note: 80-bit
long double
remains unsupported by MSVC.
- Note: 80-bit
- Added
- Improved test coverage:
- Added test coverage for CUDA 10.1 Update 2. #1519 #1539
- Accelerated the test for P1502R1 Standard Library Header Units by building the header units in parallel, using
/MP
. #1529 - The test harness now builds all tests for ARM and ARM64. #1505
- This is build-only; the goal of running tests on ARM and ARM64 is tracked by #820.
- Clang is supported for ARM64 only, not ARM.
- Updated the
libcxx
test suite. #1594 - Added more test coverage for the
default_initializable
concept. #1604
- Code cleanups:
- Removed compiler bug workarounds. #1521 #1711 #1841
- Improved formatting with clang-format 11. #1521
- CUDA 10.1 Update 2 is now required, allowing the STL to unconditionally use
if constexpr
for compiler throughput and code clarity. #1544 - Updated
<charconv>
's product/test code to be more compatible with libc++. #1670 - Rearranged
[[nodiscard]]
attributes to appear before__declspec
specifications for functions (otherwise,[[nodiscard]]
is ignored). #1703 - Updated the Standard Library Header Units test now that the compiler supports attributes in modules. #1747
- Suppressed a harmless warning in test code after MSVC implemented
constinit
. #1611 - Renamed a few internal identifiers to be
_Ugly
, following the Standard's strict requirements. #1743 - The STL now consistently uses SFINAE instead of concepts when
__cpp_lib_concepts
isn't defined. #1749 - Removed comments that were citing proposed resolutions for LWG issues, now that those issues have been officially resolved by the February 2021 virtual plenary meeting. #1686
- Fixed mysterious LWG issue citations in
<optional>
. #1788
- Infrastructure improvements:
- Updated dependencies. #1521 #1577 #1636 #1711
- Updated build compiler to VS 2019 16.10 Preview 1 (now required).
- Updated Clang to 11.0.0 (now required).
- Updated vcpkg for Boost 1.75.0 (now required).
- Updated CMake to 3.19 (now required).
- Updated Ninja to 1.10.2.
- Updated Python to 3.9.2.
- Accelerated the CI with partial clones, shallow clones, and sparse checkouts. #1513 #1605
- Fixed reliability issues in the
parallelize
tool, which is used to runclang-format
on all files in the codebase. #1632 - Skipped a flaky test in the legacy
tr1
test suite. #1697 - We now use GitHub Actions to update the Status Chart every day. #1769
- The test harness now runs the Standard Library Header Units test in a "parallelism group", which should make the CI system more reliable. #1776
- Updated dependencies. #1521 #1577 #1636 #1711
- Updated
_MSVC_STL_UPDATE
. #1535 #1552 #1626 #1708 #1801