• Forum
  • Lounge
  • Visual Studio 2019 v16.10 and v16.11 Pre

 
Visual Studio 2019 v16.10 and v16.11 Preview 1 are Available Today!

C++

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.
Last edited on
I'm currently updating!

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
closed account (z05DSL3A)
I'm guessing that a lot of people are updating as I'm getting a rather poor download speed...
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.
I hope it is stable. This last year the updates have been all over the place for (mostly harmless) weirdness.
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!
Heh, I tried a cppreference example of using std::format ( https://en.cppreference.com/w/cpp/utility/format/format ) and the latest VS 2019 compiled that simple example (release x86, 32 bit) as requiring 726 functions!
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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>

class Averager
{
private:
   double include { };
   int    num     { };

public:
   Averager()                              { }
   Averager(double i) : include(i), num(1) { }

   void AddInclude(double val) { include += val; num++; }

   double GetAverage()         { return (include / num); }
};

int main()
{
   Averager* avg = new Averager(3.877);

   avg->AddInclude(10.25);
   avg->AddInclude(9.75);
   avg->AddInclude(4.9);

   std::cout << avg->GetAverage() << '\n';

   delete avg;
}

This code VS reports that 12 functions are generated and compiled.
Last edited on
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.

seeplus:
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


Here is a talk from Jason Turner about ABI. Definitely worth watching for people who don't know what ABI is. https://www.youtube.com/watch?v=By7b19YIv8Q
Good talk. Best explanation I've come across :)
I vote that the 'big change' in C++23 is the re-definition of the ABI so that it's fit for the next 10 years.

Anyone here involved with the C++ committee (WG21)?
Last edited on
Since when there's a "the ABI" that can be redefined? Do you mean they're finally going to define one?
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.
As long as we get the language improvements ASAP (C++23?) .... :)
Last edited on
Topic archived. No new replies allowed.