Our compiler and STL are now feature-complete for the latest available C++20 standard! 16.10 comes with a few much-anticipated features: calendars, timezones and <format>. These features are all available under the /std:c++latest switch.
However note that some key C++20 library features are expected to be amended by upcoming Defect Reports (ISO C++20 bug fixes) that may change them in an ABI-incompatible way. See https://github.com/microsoft/STL/issues/1814
Note that VS2019 16.11 will be the last version of VS2019 - and that ABI-breaking changes introduced after 16.11 is released will not be back-ported to 16.11 and will only be applied to VS2022 v17
My download speed wasn't too horrible, residing within a few dozen miles of main MS HQ probably doesn't hurt.
So far after a quick test drive of the IDE nothing really major seems to be broken. Not even a few cracks in the plastering.
I bet there will be more than a few defect reports coming in the future no matter what the compiler. I can barely wait for VS 2022. Or updated alternate compilers like MinGW.
Speaking of issues, just a couple days ago I noticed that my VS installation is now unable to build any .NET Framework (but not Core) projects. I think it's some kind of MSBuild weirdness. What a massive pain that was!
Build started...
1>------ Build started: Project: Project1, Configuration: Release Win32 ------
1> Creating library C:\Programming\My Projects\Project1\Release\Project1.lib and object C:\Programming\My Projects\Project1\Release\Project1.exp
1>Generating code
1>Previous IPDB not found, fall back to full compilation.
1>All 726 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
1>Finished generating code
1>Project1.vcxproj -> C:\Programming\My Projects\Project1\Release\Project1.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
> Build started at 7:59 PM and took 3.511 seconds
Maybe it is the booze, maybe not, but I find it enormously amusing that something I'd consider C++20 simple takes so many functions to work.
A couple of new files I don't remember seeing before 16.10 were created in the output folder along with the executable. Project1.exp and Project1. lib.
After some quick testing with a bit of code that doesn't use C++20 the .exp and .lib files are not created. Even if the standard is set to C++20. Curiouser and curiouser.
Re std::format. The CPP standards committee is considering some breaking changes to address reported shortfalls (such as speed compared to the original fmt) in C++20 standard. That's why MS still has /latest for C++20 and not /C++20 even though they have as of 16.10 implemented all features. These will be issued as defect reports to the published C++20 standard once agreed.
However note that some key C++20 library features are expected to be amended by upcoming Defect Reports (ISO C++20 bug fixes) that may change them in an ABI-incompatible way. See https://github.com/microsoft/STL/issues/1814
Note that VS2019 16.11 will be the last version of VS2019 - and that ABI-breaking changes introduced after 16.11 is released will not be back-ported to 16.11 and will only be applied to VS2022 v17
As has been made clear in Jason's talk and elsewhere, required/necessary changes to C++ are being deferred by the current requirement to keep existing ABI's. As has been said, this situation cannot continue indefinitely (or IMO for another 6 years). C++23 would make a convenient 'break point' where the ABI's changed as required and that the major changes in C++23 would be those features/improvements requiring these ABI changes. This issue has to be grapsed at some point - so why not C++23? The longer it's left.......
So, and I'm sorry for insisting on this point, what I'm getting is not that they're going to define or redefine a standard ABI, but that they're going to let implementers continue to have their own non-interoperable ABIs but they're going to change the minimum requirements those ABIs need to meet to be compliant.