---
title: "Returning C++26 for the Evaluation It Skipped"
document: P4238R0
date: 2026-07-30
intent: inform
audience: WG21
reply-to:
  - "Vinnie Falco <vinnie.falco@gmail.com>"
  - "Ville Voutilainen <ville.voutilainen@gmail.com>"
  - "Jos&eacute; Daniel Garc&iacute;a S&aacute;nchez <jdgarcia@inf.uc3m.es>"
  - "John Spicer <jhs@edg.com>"
---

## Abstract

Contracts entered C++26 through procedural moves that broke no rule yet left no record of having reconciled the sustained technical opposition to the design.

WG21 decides by consensus, which ISO defines as the reconciliation of conflicting arguments, not a simple count of votes. The

Contracts proposal advanced via a roadmap for which forward motion was the default. The Technical Specification path was closed, and papers were merged faster than many members could review them. The accumulation of incremental polls was treated as a mandate that no single vote had granted. When the design carried, over a sustained Strongly Against minority, the poll and its recorded result - "Consensus" - were the whole of what entered the record. No record indicates that the opposition had been answered, and the papers that serve as the history do not always match the meeting record.

None of this process broke a rule, which is why the working group cannot catch it from inside: a process built to produce consensus on time will produce it, whether or not the underlying design was audited. The one audit that ISO places outside the working group is the National Body ballot, and the C++ Alliance's position is that the National Bodies vote No on the

C++26 DIS ballot, with technical comments, and return the draft for the evaluation it skipped, at the cost of one cycle. The same procedural maneuvers are being practiced again on a successor proposal, so the ballot check should be exercised now rather than deferred to a later cycle.

The authors provide information and serve at the pleasure of the committee. The authors of P4238R0 request no floor time, no poll, and no committee action; they state a position and offer two recommendations to the National Bodies and the convener.

## Revision History

* R0: Initial version.

## 1. Introduction: The Alliance Position

The C++ Alliance's position is that the National Bodies should vote No, with technical comments, on the C++26 DIS ballot as

[ISO/IEC Directives Part 1, clause 2.6.2](https://www.iso.org/sites/directives/current/consolidated/index.html) provides for this scenario, which would return the draft to the committee and allow for the Contracts design to receive the technical evaluation it skipped. The Alliance further recommends that the convener state that the committee's officers will not penalize any delegate or National Body for casting that vote.

The case for a No vote rests on two independent grounds. A National Body persuaded only that the Contracts design is not ready, based on the technical record alone and setting aside any account of how the design advanced, has sufficient basis to vote No. The procedural findings that follow explain how a design carrying sustained technical opposition reached the ballot without that opposition being reconciled; they strengthen the case but are not a precondition for it.

This paper first states the model of consensus determination it uses (Section 2), and then contributes

* an account of the procedural path by which Contracts entered C++26 (Section 3);

* an analysis of how vote counts came to stand in for the chair's reasoned determination (Section 4); and

* the constitutional basis for the National Body ballot as the remaining external check (Section 5).

The paper assumes that the procedural moves it describes were compliant with SD-4 and the ISO Directives. It further assumes that the poll tallies it cites are accurate as recorded.

## 2. How Consensus Is Supposed to Work

WG21 decides by consensus, not by majority rule. The chair, a subject-matter expert, weighs the arguments of every side.

Where those arguments can be reconciled, the chair reconciles them. Where the arguments cannot be reconciled, the chair is the decision-maker and may decide against the numerical majority. This empowerment is deliberate: WG21's own guidance states that "the chair's determination of consensus is authoritative, not the straw poll" and that "we make decisions by consensus, not majority" ([P2195R2](https://wg21.link/p2195r2)). ISO defines consensus as a process that takes all views into account and reconciles conflicting arguments, not as a count of hands ([ISO/IEC Directives Part 1, clause 2.5.6](https://www.iso.org/sites/directives/current/consolidated/index.html)). The chair's authority is broad by design, and rightly so; a committee that decides technical questions by votes rather than expert judgment would be technically unsound.

The counterpart of that authority is a recorded reason for decisions. Authority to declare consensus over a sustained objection is justifiable only if the chair states why such a decision was reached. This record of decisions and the reasons for them allows a body outside the working group to understand how a decision was made. ISO builds this review into the process: ISO directs the leadership to register, at the committee-draft stage, any sustained opposition and resolve it in good faith. At the ballot, the National Bodies can then read the result and judge whether the call was sound. The authority to decide, a recorded rationale for that decision, and external review of that rationale and decision compose one mechanism; remove any part and the rest does not function as intended.

Using that model as a lens to view the record reveals a process that retained the authority but omitted the accountability; consensus was declared from vote ratios over sustained opposition, with no rationale recorded for review. The committee substituted polls for the chair's reasoned determination. The switch to polling alone was not explicit; reconciliation simply faded from practice. The remedy is to restore the review that always accompanied the chair's power (Section 5).

## 3. The Procedural Path of P2900

Every move in this section was available within SD-4 and the ISO Directives; no rule was broken. The Contracts authors' own published rationale, [P2899](https://wg21.link/p2899), and the recorded poll results depict P2900's path as follows.

**The Consensus Ratchet.** P2900 advanced through a long series of incremental polls, no one of them decisive. Each merged change became the settled baseline upon which the next poll was built. [P2899](https://wg21.link/p2899) records dozens of such determinations, and the 63 papers in ten months counted by [P3443R0](https://wg21.link/p3443r0) fed that accumulation. No poll ever asked the room to approve the design as a whole; the mandate was assembled one reversible-looking increment at a time, until the accumulation of polls was itself treated as a mandate. The polls that did forward the design were themselves vote counts recorded as consensus over a standing minority: EWG sent P2900R11 to CWG for C++26 (Wroclaw, 2024-11-18: 25/17/0/3/12), and LEWG forwarded it the same week (Wroclaw, 2024-11-21: 23/9/1/0/5), each carrying a Strongly Against bloc (12 and 5, respectively) and neither recording a finding that the opposition had been answered.

**The Reversed Burden.** Once the incremental approvals had accumulated, removing the feature required a fresh consensus the objectors could not assemble. The motion to remove P2900 from C++26 failed (Hagenberg, 2025-02: 9/8/3/19/41), so a divided room preserved the feature by default. Adding Contracts to the standard and removing it from the standard both require consensus, and every accumulated approval shifted the burden further onto whoever wished to stop it, independent of the technical merits.

**The Roadmap Ratchet.** In November 2022, SG21 adopted a roadmap for a Contracts MVP targeting C++26, recorded in [P2899](https://wg21.link/p2899) with the clause that the roadmap will "need consensus in SG21 to revise" (Kona, 2022-11-12: 10/10/5/1/1). Once that clause was in force, forward motion was the default, and any proposal to slow down was itself a revision of the roadmap, subject to the same consensus determination the chair controlled. Starting the schedule cost one poll; stopping it required assembling a second consensus against the people who had set the first. The direction of travel was fixed before the design was settled.

**The Closed TS Path.** A Technical Specification would have let implementations ship Contracts and gather field experience before the design entered the International Standard, and SG21 twice declined that path (SG21, 2022-12: 15 for, 3 against, 0 abstaining, regarding following the roadmap rather than pursuing a TS; SG21, 2024-05-30: 1/3/3/12/10 against a TS). At the

2024 session, the single paper proposing to pursue a TS was outnumbered two to one by Contracts authors' papers scheduled against it. With the TS route closed, the only remaining path was the International Standard pipeline, where the impending

C++26 deadline supplied the pressure that later complaints described. Gabriel Dos Reis, who favored more field experience, wrote that "rushing the current P2900 into the IS is among the worse mistakes we could make, ranking way ahead of a TS that permits evaluation of the various conjectures in P2900" ([SG21 reflector, 2024-05-23](https://lists.isocpp.org/sg21/2024/05/8894.php)).[^reflector] Co-author John Spicer, who chaired those sessions, has concluded that "P2900 doesn't make anything better, and makes quite a lot worse" ([ext reflector,](https://lists.isocpp.org/ext/2025/10/26208.php)

[2025-10-24](https://lists.isocpp.org/ext/2025/10/26208.php)).

[^reflector]: All reflector comments are shared with their author's permission.

**Rebuttal by Volume.** Objections to P2900 were met with rebuttals - authored by the same people who controlled scheduling - longer than the objections. [P3327R0](https://wg21.link/p3327r0) answered function-pointer concerns, and the eighteen-page [P3591R0](https://wg21.link/p3591r0) (by Berne and

Doumler) and the twenty-two-author [P3846R0](https://wg21.link/p3846r0) answered design and national-body concerns. When these papers were presented alongside the objection and then put to a vote, volume and authorship, rather than substance, settled questions.

Co-author Ville Voutilainen has described the pattern as "multiple other such rebuttal papers that end up being dismissal papers" ([ext reflector, 2025-02-03](https://lists.isocpp.org/ext/2025/02/24718.php)).

**Compressed Review Window.** [P3443R0](https://wg21.link/p3443r0) recorded the tempo of the process: 63 papers handled in ten months, a majority of them merged into P2900 less than a week after publication. At that rate, the only participants who could track each change were those working on Contracts full time, which left little review time for anyone else.

**Contradictory Consensus.** The treatment of contracts on virtual functions was decided and reversed repeatedly. EWG merged the caller/callee model ([P3097](https://wg21.link/p3097)) into [P2900](https://wg21.link/p2900) (St. Louis EWG, 2024-06-28: 18/15/5/1/2) and then removed virtual functions again (Hagenberg, 2025-02: 20/24/13/14/2). Each poll was recorded as consensus, yet the two polls were opposites. The result was only what the room decided on a given day, not a stable technical position. The point is not about the merits of virtual functions, which C++26 does not include, but that consensus was the recorded result of both a decision and its reversal within months. Bjarne Stroustrup, reviewing the surviving model, wrote that it "is novel, unique, untried, untested, and unimplemented. That alone should disqualify it from inclusion in an international standard" ([ext reflector, 2026-06-12](https://lists.isocpp.org/ext/2026/06/27121.php)).

## 4. When Votes Replace Judgment

Section 2 described the usual ISO mechanism: the chair's reasoned determination, recorded, and open to review at the ballot.

The P2900 record shows a partial following of protocol. The determinations were made, but the reasoning behind them was not written down; the votes were labeled as consensus, and the votes are all that survives. Yet the missing rationale is not a broken rule.

**The reasons were never recorded.** At the subgroup level, where these determinations were made, [SD-4](https://isocpp.org/std/standing-documents/sd-4-wg21-practices-and-procedures) leaves the determination of consensus to the chair and requires no record of the reasons for it. A subgroup chair who declared consensus over sustained opposition broke no rule. But the reconciliation the model calls for is missing from the record:

consensus was declared over sustained Strongly Against blocs with only the tally recorded and no finding that the opposition was addressed. Recording that finding is best practice, not a subgroup requirement, which is why the omitted rationale cannot be corrected from inside the process. Vinnie Falco, a co-author of this paper, put it precisely: "The chair may have excellent reasons for determining consensus after a 3.7:1 poll, but those reasons aren't documented. The number stands alone as the artifact" ([ext reflector, 2026-06-12](https://lists.isocpp.org/ext/2026/06/27123.php)).

**Consensus is not a majority vote.** As Section 2 described, consensus is reached when objections are resolved; it is not a simple majority vote. The IETF states the same for its own process ([RFC 7282](https://www.rfc-editor.org/rfc/rfc7282.html)). In the Contracts and P3100 records, consensus was instead called from vote ratios over sustained Strongly Against minorities. Co-author J. Daniel García states the distinction plainly: "There is a difference between consensus and majority that should not be ignored" ([SG21 reflector, 2025-10-17](https://lists.isocpp.org/sg21/2025/10/11355.php)).

Bjarne Stroustrup, reviewing the Brno straw poll, added that "5 strongly against is significant, and the opposition has been sustained" ([ext reflector, 2026-06-12](https://lists.isocpp.org/ext/2026/06/27121.php)).

**Poll Curation.** The record the Contracts authors publish does not always match the record of the meeting. In the Contracts record, the committee's public poll record marked a Tokyo poll "not meant to be binding, but rather to offer a first set of feedback to the authors" and recorded no result for it (Tokyo EWG, 2024-03-20, Poll 8: 17/12/12/12/5, [cplusplus/papers](https://github.com/cplusplus/papers/issues/1648#issuecomment-2009017161)

[#1648](https://github.com/cplusplus/papers/issues/1648#issuecomment-2009017161)). The Contracts authors' rationale paper reproduces that poll, without the qualification, beside polls that carry a recorded result, such as "Result: Consensus against" ([P2899R1](https://wg21.link/p2899r1); the same tally is also printed in [P3197R0](https://wg21.link/p3197r0)). From the published

Contracts papers alone, a reader cannot determine which polls were binding and which the committee had explicitly set aside as nonbinding feedback.

**The consequence of inaction: P3100.** The clearest sign that the working group itself cannot correct this procedural anomaly is the unchallenged recurrence of the same procedural maneuvers right now: i.e., forward motion by default, accumulated incremental polls taken as a mandate, calendar pressure, and rebuttal by volume. P3100 is not part of C++26, and this paper asks the National Bodies to take no action on it; it is cited only as proof that the pattern of Section 3 is a repeatable method.

Timur Doumler and Joshua Berne, authors of the Contracts rationale [P2899R1](https://wg21.link/p2899r1) and [P2900R14](https://wg21.link/p2900r14), are the authors of [P3100R6](https://wg21.link/p3100r6). The method has been sharpened; a standing series of EWG telecons was voted into existence to review the paper one clause at a time (Sofia, 2025-06: 15/27/2/0/0), which commits the room's calendar in advance such that competing designs cannot be scheduled. When the one poll that asked the room to move P3100 forward failed (Croydon EWG, 2026-03-26: 1/17/10/18/14), the paper's own published history recorded only the same-day poll to continue case-by-case review (39/19/5/2/1) and omitted the adverse result. Once a technique elevates a design over sustained opposition and meets no pushback, it becomes a precedent, and a precedent that succeeds is used again. No rules were broken, and in such cases, only resistance from outside the self-rewarding process can drive a return to established norms.

## 5. The Remedy: The National Body Ballot

Unrecorded or unpublished determinations can be duly scrutinized only by an audience outside the working group, like the

National Bodies at the ballot. A chair who can declare consensus over sustained opposition has every reason to reconcile in good faith knowing the rationale will be read and weighed at the ballot; remove that oversight and the incentive disappears.

The position and recommendations offered here restore the intended check.

**The Subtractive Last Line of Defense.** The National Body ballot is the only mechanism in the ISO system that can remove a feature after a working group has adopted it. Sitting outside the working group by design, the National Body is a counterbalance so that the people closest to the work are not the only ones who check it. A negative vote accompanied by technical comments is unconditionally valid. Approval of the draft requires both a two-thirds majority approval and no more than one quarter in opposition, so seven votes against among twenty-six voting P-members would return the document

([ISO/IEC Directives Part 1, clauses 2.6.2, 2.6.3, 2.6.5](https://www.iso.org/sites/directives/current/consolidated/index.html)).

The power is real and recent; the trivial-relocation feature ([P2786](https://wg21.link/p2786)) was removed from C++26 after National Bodies objected.

[P4043R0](https://wg21.link/p4043r0) records more than twenty National Body comments on Contracts, several seeking its removal or deferral at the

Committee Draft stage. Deferral under National Body pressure is ordinary practice in C++ itself. In 2008, the UK declared that

"the BSI intends to vote 'No' on any C++0x FCD ballot that contains concepts" ([N2697](https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2697.html)), and concepts were removed from

C++0x the following year. In 2006, UK-led National Body opposition defeated the C++/CLI fast-track ballot outright (11-9). A

National Body that votes No with technical comments performs the oversight function the ballot exists for. J. Daniel García has warned that "there is a serious risk that for C++26 we get NB voting abstention or even against the IS," which "would be the first time for ISO 14882" ([ext reflector, 2026-03-08](https://lists.isocpp.org/ext/2026/03/26973.php)).

The return threshold is not the only reason to cast the No vote. Every C++ DIS ballot from C++11 through C++23 passed unanimously; the C++26 CD ballot has already broken that pattern, with three National Bodies voting No ([N5028](https://wg21.link/n5028)). A negative vote with technical comments - even short of the one-quarter that returns the draft - is a determination the committee cannot set aside; [clause 2.6.5](https://www.iso.org/sites/directives/current/consolidated/index.html) directs that "every attempt shall be made to resolve negative votes," which places the objection and the committee's answer on the permanent record and lowers the cost of the same scrutiny in later cycles.

The technical comments such a vote carries stand on their own. Stroustrup describes the novelty and lack of implementation, and Finland's Committee Draft comment and co-author Ville Voutilainen both pressed the absence of deployment experience

("Bring me deployment experience. Then we have a basis for voting", [ext reflector, 2026-07-17](https://lists.isocpp.org/ext/2026/07/27355.php)). Both are worthy of a No vote, regardless of the procedural concerns. Returning the draft targets one contested feature at the cost of a single cycle; it does not reject reflection, execution, or the rest of C++26, which continue on their published paths.

The comment stage is not a substitute for the vote. The formal disposition of comments and its per-comment tracker are not public. The Contracts comments that were addressed at all were dispositioned by poll rather than by a recorded reconciliation. [P4044R0](https://wg21.link/p4044r0), the response paper to Romania's comment RO 2-056, failed (Croydon EWG, 2026-03-26, poll

"Forward P4044R0 to CWG for inclusion in C++26 as a response to RO 2-056": 3/4/0/22/23, not consensus). A comment stage whose dispositions are neither published nor reconciled, only polled, has produced no auditable record; if National Body comments were answered by default with no change, the ballot would be a rubber stamp rather than a review. Because the comment stage was resolved this way, the ballot vote is the check that remains.

**Removing the Penalty for Voting No.** When a right carries a social cost, that right will be used least when needed most. [SD-4](https://isocpp.org/std/standing-documents/sd-4-wg21-practices-and-procedures) states that a member who regularly uses the escalation process "erodes their credibility," a penalty the Directives do not attach to an unconditional ballot right ([ISO/IEC Directives Part 1, clauses 2.6.2, 5.1.2](https://www.iso.org/sites/directives/current/consolidated/index.html)). The informal treatment of a No vote as disloyalty deters National Bodies from casting one and encourages groupthink. The convener has the standing to remove that social deterrent. The C++ Alliance recommends that the convener publicly state that the committee's officers will not penalize a delegate or a National Body for voting No, making the last line of defense explicitly available. This suggestion - not demand

- is offered as a course the committee may adopt and needs no floor time.

## 6. Conclusion

The set of procedural moves that carried Contracts into C++26 is now doing the same for P3100, and each of them was within the rules. That is the difficulty. A process followed exactly can still deliver a feature that offers no record of having reconciled its sustained opposition. The working group cannot detect this lack of documentation because the working group itself has no requirement for the reconciliation to be written down. The National Body ballot is the one review ISO placed outside the working group to audit exactly this kind of case.

The C++ Alliance's position is that the National Bodies return C++26, at the cost of a single cycle, to complete the technical evaluation it has not yet received. This action returns one contested feature, not reflection, execution, or the rest of the standard, which would continue on their published paths. The Alliance further recommends that the convener state plainly that no officer will penalize a delegate or a National Body for a No vote, ensuring that the intended check on which the system depends is available in practice. Acting on these two suggestions will offer C++ a feature that has been evaluated before it is locked into the standard and the ABI ships. Conversely, if the draft is rubber-stamped, C++ will pay for any potential defect that consensus procedure alone could not surface.
