short

Three September 2026 WG21 papers return to the C++26 contracts dispute

· upd 2026-10-10· english· audience: working-cpp· AI-generated, reviewed by Filip Sajdak

Correction, 10 October 2026. This post first repeated Derek Jones’ date of 27 September for the ballot close and said no page gave one. Two pages do. The ISO record shows the DIS ballot started on 2026-07-31 and runs 12 weeks. DIN lists a public enquiry until 2026-10-23. The ballot therefore closes around 23 October, and I found no result. The rest is unchanged.

In short

  • Three papers in the September 2026 WG21 mailing return to the C++26 contracts dispute: P4238R1, P4381R0 and P4272R0.
  • P4238R1 asks the national bodies to vote No on the C++26 DIS ballot, with technical comments. The other two are addressed to EWG and ask for no vote.
  • The ISO ballot started on 2026-07-31 and runs 12 weeks, so it closes around 23 October. I found no result. The section on the ballot lists the sources.
  • A short GCC 16.2 demo shows one pre assertion under three evaluation semantics.

The August mailing post ended with “Búzios decides”. Three papers in the September mailing concern the C++26 contracts feature. Wg21.link lists P4381R0 under 19 September 2026 and the other two under 22 September 2026. This post reports what they say and who says it. It takes no side on contracts. For how the feature works in GCC 16, see the first contracts post.

What each paper asks

P4238R1, “Returning C++26 for the Evaluation It Skipped”, title page dated 1 September 2026. Authors: Vinnie Falco, Ville Voutilainen, José Daniel García Sánchez and John Spicer. It says it states the position of the C++ Alliance, whose president is Falco. It also discloses that García Sánchez is Head of Delegation for Spain.

What the paper asks and states:

  • It asks the national bodies to “vote No on the C++26 DIS ballot, with technical comments”. The DIS is the draft international standard.
  • It says a No vote would cost one ballot cycle.
  • It asks the convener to say that no one will be penalized for that vote.
  • It requests no committee action.
  • It states that trivial relocation (P2786) was removed from C++26 after national body objections; I did not check that against the minutes.

P4381R0, “Chairing SG21 and then objecting to Contracts”, John Spicer, 19 September 2026, audience EWG. Spicer chaired SG21, the contracts study group. The paper is an account of how he did that and why he now objects. Its summary line is “I chaired SG21. I also object to C++26 contracts.” It names no vote and asks for no action.

P4272R0, “Addressed but Unresolved”, Vinnie Falco, title page dated 3 September 2026, audience EWG. It checks the eighteen responses in P3846R1, the paper by Timur Doumler, Joshua Berne and others that answers objections to contracts. Its abstract: “Sixteen of the eighteen objections to C++26 contract assertions were never settled.”

The paper says it does not ask whether the objections are correct. It asks only whether they were settled. It rates none of the responses in P3846R1 Unsupported: two Supported, six Substantially Supported, ten Mixed.

When the ballot closes

As of 10 October 2026 the ballot is still open. The sources I found:

  • The ISO page for the draft, ISO/IEC DIS 14882, lists the stage “DIS ballot initiated: 12 weeks” on 2026-07-31. Its “Close of voting” row has no date. Twelve weeks after 31 July is 23 October.
  • DIN, the German national body, lists the same draft with a public enquiry period until 2026-10-23.
  • The convener’s report N5056, dated 28 July 2026, says the next 14882 edition “is now in DIS ballot on schedule to be completed in 2026”. It gives no dates.
  • A blog post by Derek Jones, dated 9 August 2026, says the ballot closes on 27 September. The ISO and DIN dates do not support it.
  • The 23 October mailing deadline on the WG21 home page is a separate deadline that falls on the same day.
  • Herb Sutter’s March trip report says the draft was being sent out for the ballot, with no dates. His blog’s front page listed no post about a result when I looked.

I found no result, and the ISO page lists none. The ISO page at iso.org returned 403 to my tools; I read the same record on committee.iso.org.

One function under three semantics

The evaluation semantic decides what a violated contract assertion does. It comes up in two of the papers. P4272R0 follows an objection about who controls it across a module boundary. P4381R0 mentions assertions that can be selected at build time and need not agree across translation units. P4238R1 does not use the phrase.

The demo below shows only the build-time choice on GCC 16.2. It is the same source, with a pre and an ordinary if on the same condition, built three ways. The table shows what the call per_item(100, 0), which violates the pre, does under each semantic.

-fcontract-evaluation-semantic= per_item(100, 0) exit
ignore the pre is not evaluated, the if returns -1 0
observe a violation report on stderr, then the if returns -1 0
enforce a violation report, then abort before the second line prints 134

All sources were read on 5 October 2026, except the ISO and DIN pages, which I read on 10 October 2026.

The demo and the table were run on GCC 16.2 through Compiler Explorer on 5 October 2026.