Marshall's July Update

Aug 5, 2019

There are four main areas where I spend my time.

  • Libc++, where I am the “code owner”
  • WG21, where I am the chair of the Library Working Group (LWG)
  • Boost
  • Speaking at conferences

This month, the big news (and the big work item) was the approval of the C++ “Committee Draft” at the WG21 meeting in Cologne on July 15-20.

You can think of this as a “beta version” of the C++20 standard; all features are complete. The next step is bug fixing, with an eye towards releasing next year.


The LLVM 9.0 release is on track for September. We have a release branch, and the RC1 was recently dropped.

Because of the run-up and the aftermath of the Cologne meeting, the libc++ accomplishments are a bit sparse this month.

As the “code owner” for libc++, I also have to review the contributions of other people to libc++, and evaluate and fix bugs that are reported. That’s a never-ending task; there are new contributions ever day.

LWG issues resolved this month in libc++ (almost certainly incomplete)

LLVM features implemented this month (almost certainly incomplete)

  • P1612 Relocate endian
  • P1466 Parts of P1466 “Misc Chrono fixes” more to come here.

LLVM bugs resolved this month (definitely incomplete)

Other interesting LLVM bits from this month (certainly incomplete)

  • Revision 365854 Reorganize the <bit> header to make most of the facilities available for internal use pre-C++20. NFC for external users.

  • Revision 367120 Fix a bug in std::chrono::abs where it would fail when the duration’s period had not been reduced.

  • Revision 364884 Add an internal call __libcpp_is_constant_evaluated, which works like std::is_constant_evaluated, except that it can be called at any language level (back to C++98). For older languages, it just returns false. This gets rid of a lot of ifdefs in the libc++ source code.

The current status of libc++ can be found here:


As I said above, we shipped a CD out of Cologne. Now we wait for the National Bodies (members of ISO, aka “NBs”) to review the draft and send us comments. When we’ve resolved all of these comments, we will send the revised draft out for balloting. If the NBs approve, then that draft will become C++20.

We approved many new features for C++20 in Cologne:

  • P0553 - Bit Operations
  • P0980 - Constexpr string
  • P1004 - Constexpr vector
  • P1065 - Constexpr INVOKE
  • P1135 - The C++20 Synchronization Library
  • P1208 - Source Location
  • P0645 - Text Formatting
  • P1361 - Integration of chrono with text formatting
  • P1754 - Rename concepts to standard_case for C++20, while we still can
  • P1614 - Spaceship integration in the Standard Library
  • P0600 - Stop Tokens and a Joining Thread
  • P0631 - Math Constants

We also did not approve many proposed features. Most of these were not approved because we ran out of time, rather than any fault of theirs:

  • P1391 - Range constructors for string_view
  • P1394 - Range constructors for span
  • P0288 - any_invokable
  • P0201 - polymorphic_value
  • P0429 - A Standard flatmap
  • P1222 - A Standard flatset
  • P0533 - constexpr for cmath
  • P0792 - function_ref
  • P0881 - A Proposal to add stacktrace library
  • P1272 - Byte-swapping
  • P0627 - Function to mark unreachable code
  • and many others

I still have a bunch of mechanical changes that need to be made before we ship:

We polled the NBs before Cologne, and they graciously agreed to have these changes made post-CD.


The next Boost release cycle is in process; I am helping Michael Caisse as release manager with this release. We should have a release in the next couple of weeks.


Upcoming talks:

  • CppCon in September in Denver.
  • C++ Russia is at the end of October in St. Petersburg.
  • ACCU Autumn is right after the WG21 meeting in early November.
  • Meeting C++ is in mid-November in Berlin.

I will be making the “Fall 2019 C++ European Tour”, going from St. Petersburg to Belfast to Berlin before heading home mid-November.

All Posts by This Author