Trip report: Fall ISO C++ standards meeting (Issaquah)

[ETA: Mentioning specific TSes expected to be merged soon post-C++17.]

On Saturday, the ISO C++ committee completed its fall meeting in Issaquah, WA, USA, hosted by Microsoft and the Standard C++ Foundation. We had over 110 people at the meeting, representing 10 national bodies. We also had more than usual local visitors – note that ISO C++ meetings are open and we always welcome people who are curious to see what goes on. As usual, we met for six days Monday through Saturday, including several evenings. Fun historical note: This meeting was held in the same hotel as the meeting that completed and shipped C++14.

The following are some highlights of what we achieved last week. You can find a brief summary of ISO procedures here. The main things to note are:

  • “IS” means “international standard.” In our case, it’s the core C++ standard itself. Think of this as “trunk.”
  • “TS” means “technical specification,” a document separate from the main standard where we can gain experience with new features before putting them into the IS. We have several of these, summarized on the status page. Think of these as “beta branches.”

C++17 completed its comment ballot, first of two (expected) meetings to address comments

Draft C++17 hit its major feature-freeze at our previous meeting, and over the summer we conducted its major ISO comment ballot. So the primary focus at this meeting was addressing the review comments. Think of it as the “shakedown” stage of fixing bugs before release.

We expected to take two meetings to resolve all the comments, and we are on track. So at our next meeting we hope to finish addressing the ballot comments and any other fixes we can resolve and hopefully set C++17 in stone as we send it out for its possibly-final formal approval ballot. (ISO administrative detail: I say “possibly-final” because as long as that ballot comes back with zero No votes, we can skip the actual final extra ballot, as we did with C++14. If for some reason it doesn’t, we’d run one more ballot over the summer. Either way, we’ll be done in 2017.)

We made some minor adjustments. For example, the std::variant type was tweaked to make it clear that Ts cannot be empty or contain void or T& reference types.

Although we didn’t add any new features, we did agree to finally remove one: Old-style dynamic exception specifications were already deprecated, and have now been officially removed from the standard. They are superseded by noexcept.

Other progress

Besides resolving C++17 ballot comments, we also worked on the TSes: We completed one, sent two out for their main ballots, and have two more expected to go out for their main ballots at the next meeting.

Here is a summary of progress, in rough order of expected delivery dates, starting with what we actually finished at this meeting:

The Library Fundamentals 2 TS is now done. This is another round of “beta” standard library extensions, and at this meeting we completed resolving its comment ballot results and approved sending the final text for publication.

The Networking TS and Ranges TS both reached feature-freeze and were sent out for their comment ballots. Both are expected to be completed and published in 2017.

The Modules TS and Coroutines TS are both “almost” ready to go out for their comment ballots. Both very nearly made it this time, but they need some final review and we expect both to go out for their comment ballots at our next meeting this winter. Depending on timing, they too might be done and published in 2017.

The Parallelism 2 TS is in progress and should reach its comment ballot in a small number of meetings. The big news here is that it seems the concurrency subgroup has finally agreed on a unified executors proposal, which is important to be able to say “where” a piece of concurrent or parallel work executes. This is an important milestone and the result of copious amounts of effort across several meetings.

We also continued incubating other work. In particular, the Reflection study group reviewed the latest merged static reflection proposal and found it ready to enter the main Evolution groups at our next meeting to start considering the unified static reflection proposal for a TS or for the next standard.

What’s next

A lot of our C++ standardization work is reaching “ship stage” at about the same time, which is pretty exciting to see, so we’re in the middle of a busy handful of meetings. At our next March 2017 meeting, we hope to finish addressing the ballot comments and plan to send C++17 out for its final approval ballot. We also expect to send out a few more TS “beta” branches out for review as mentioned above.

Then, once C++17 ships next year and possibly as soon as our July meeting, I expect we’ll start looking at merging more of the TS “beta branches” into the C++ “trunk,” including the published TSes that didn’t make the C++17 merge (notably Concepts and Concurrency). Here’s an updated snapshot of our status:

wg21-timeline

Thank you again to the over 110 experts at Issaquah last week, and the many more who participate in standardization through their national bodies! Have a good winter.

10 thoughts on “Trip report: Fall ISO C++ standards meeting (Issaquah)

  1. Ah, I think standard at the moment has too many almost done stuff in the air… I wish at least one of the big 3: ranges, concepts, await made it in IS.
    Anyway I really fear that this will turn into a branch hell with different compilers implementing different stuff and if there are breaking changes between TS and future IS it will be ugly…

  2. You guys are doing really great job!
    “Depending on timing, Modules TS and Coroutines TS too might be done and published in 2017.”
    Wow!!!
    Thank you Herb, for the insights of the meeting.

  3. Thanks for the report! Great to watch the progress. I hope to attend a meeting one day :-)

    What would be the best place to learn about the discussions on a specific proposal? E.g. I’d be quite interested in the discussion on p0426r0 (“Constexpr for std::char_traits”).

  4. Thanks for your update! Always look forward to these. Really hoping for modules to aid with compile times.

  5. Has there been any serious discussion in the committee on improving the Concepts TS, in accord with some of the deficiencies that have been discussed? In particular, I’m talking about two main issues:

    1: Concept definitions. That is, having two different ways to specify concepts. A solid paper on this problem was written; have any solutions to this issue been discussed?

    2: The new template induction syntax (with the curly braces). I have read somewhere that the Ranges TS people basically refused to use it in their specification. Perhaps that part should be removed.

  6. Note, that it’s hard to get the difference between creating a class and creating a member (it’s actually specific to the previous definitions)

    vector x{}
    vs
    property y{}

  7. You didn’t say anything about namespacing, it probably better be smth like std::interface etc which looks less nice

Comments are closed.