C++ Committee Meeting Trip Report: Issaquah, 2016

A lot of effort had been channeled into addressing comments of the ISO National Bodies regarding the C++17 draft produced at the previous meeting. Also, some progress had been made in Modules: there appeared one more implementation of the TS and the implementer presented a report.

The meeting took place in Issaquah, near Seattle. It was attended by slightly over one hundred people. The primary purpose of the meeting was to move forward with C++17; to achieve that, the committee had to review more than 200 comments from various National Bodies (NBs), including treasures like ES1 (“remove inline variables”) and US 65 (“keep inline variables”) and many more like those. Fortunately, such comments had been quickly dismissed on the grounds that making amendments to anything that used to have consensus of the committee will not increase said consensus and the latter is a prerequisite for any change made at this point, the standard being in “feature freeze” mode.

One interesting procedural change: from this meeting on, only one vote per US company is allowed. This is different from previous meetings I attended, although it had been the case before, as I understand. So even if companies wished to influence committee decisions by sending more people to the meeting (which I don’t believe was happening), this has become plain impossible now. Vote of each NB representative is still counted separately, though.

As customary, I spend most of the time in Core Working Group (CWG) that began the week by resolving issues raised by NBs. Apart of a fair amount of usual small-to-medium sized bugfixes, CWG reviewed a C++17 feature that somehow missed the Core review during the previous meeting: the designated initializers (D0329r2). This feature is essentially a subset of C99-style designated initializers and it’s going to be part of C++17.

Coroutines

CWG had performed the next round of Co-routines (P0057R5) review; there were no significant problems, yet it will be back in Kona because people are concerned with introduction of a core language feature that heavily relies on the library.

Modules

A few resolutions for issues raised against the Modules Technical Specification (TS) (N4610) had been reviewed, but these were minor. A major problem had been raised, though, concerning two-phased name lookup during instantiation of a function exported by a module: this TS does not specify in any way what happens when and if such lookup brings in the non-exported names from other module(s). The issue precludes Modules to move away from its “working draft” status.

In other news on this subject, clang had begun implementation of Modules TS and a few practical suggestions had been made (P0273R0), mostly having to do with how to deal with macros and huge amount of legacy code.

Concepts

Concepts (N4553) continued to attract a lot of attention; several existing TSes are based on Concepts, as well as some new work. There is no doubt that as soon as Concepts are part of the standard, they are going to be everywhere.

Reflection

Reflection working group made a considerable progress over the last few years, producing basic noncontroversial design that can be built upon later. It is based on one compiler magic (the reflexpr() operator) and a few concepts to help with library building.

Naturally, it is based on the Concepts TS, which isn’t part of the standard, but might become one by 2020. They are going to present this design to both evolution groups during the next meetings and we might see reflection in C++ in relatively near future.

The final version of the C++17 standard will be voted on either in Kona (the next meeting) or Toronto (the meeting after the next one).

References

Maxim Kartashev

Maxim Kartashev
Pragmatic, software engineer. Working for Altium Tasking on compilers and tools for embedded systems.