「Balloting has completed for C++26. Unfortunately it was Disapproved.」
2026 年 10 月 24 日,C 语言委员会召集人 Robert Seacord 发布了这则通报。他补充说,SC22 历史上还没有任何一份语言标准在投票中被否。WG21 方向组成员 Daveed Vandevoorde 的说法更直接:此前没有任何一份 C++ 草案在 DIS 阶段收到过哪怕一张反对票。零反对票的纪录在 2026 年 10 月 23 日终结。
C++26 遭遇投票否决,核心危机在于流程信任。争议特性在内部多数通过。但反对派把战场移到了国家成员体。这场阻击战打乱了出版节奏,更动摇了共识的有效性。
赞成率仅 60%:三十年全票通过纪录终结
ISO 国际标准草案投票必须同时满足两条规则。参与投票的成员国中,赞成票必须达到三分之二。同时,反对票不得超过全部票数的 25%。任何一项指标不达标,草案就会被直接否决。
最终计票结果给出了双重打击。在 20 个参与投票的成员国中,赞成票只有 12 张,赞成率仅 60%。在 22 张总选票中,反对票达到 9 张,占比达到 41%。
赞成率距离及格线差了两票,反对票占比则接近允许限额的两倍。双重红线同时被击穿,表明各代表团的技术分歧已经公开决裂。三十年来草案在 DIS 阶段保持零反对票的历史,至此画上句号。
合同断言分歧外溢:技术争论变成国家机构游说
引发这场波澜的导火索是合同断言机制。合同特性包含 pre、post 以及 contract_assert 三项核心语法。它的目标是在语言层面为函数提供契约,提升软件安全性与可验证性。
这项特性的标准化之路走得异常坎坷。早在 2019 年的科隆会议上,旧版合同设计就因语义分歧被临时撤回。随后委员会成立专门工作组,进行了数年的重新设计。2026 年 3 月,WG21 终于以多数表决批准了当前的 P2900 方案。
但多数表决通过并不等同于达成技术共识。反对派坚持认为当前方案存在缺陷,指出它对未定义行为的处理不当,也缺少大规模工程验证。P4433R0 则逐条质疑了这些指控,并指出 2019 年以来重新设计的全部工作会因为撤回而作废。
关键文件对决:P4238 与 P4433 撕开治理伤口
分歧最终冲破了委员会的内部议事框架,演变成公开的游说战。2026 年 9 月 1 日,Vinnie Falco 与另外三位资深成员联合发布了 P4238R1 论文。文件标题直截了当地写着:退回 C++26,补上它跳过的评估。
图:WG21 论文 P4238R1 首页,作者呼吁国家成员体对 C++26 DIS 投反对票。来源:WG21(open-std.org)
P4238R1 突破了以往的技术讨论范畴。四位作者在文中直接向国家成员体喊话。他们公开呼吁各代表团投下反对票。同批作者还发布了 P4334R0 论文,并在请愿书中声称合同特性带有基础缺陷。
支持派随即展开强力反击。包括 Timur Doumler、John Lakos 在内的十余位核心作者提交了 P4433R0 论文。这份文件的标题针锋相对:不要从 C++26 中移除合同。
图:WG21 论文 P4433R0 首页,多位核心作者联署反对从草案移除合同。来源:WG21(open-std.org)
P4433R0 逐条驳斥了反对派的技术指控。联署作者指责少数成员在内部失利后,转而游说国家成员体进行狙击。德国代表 Andreas Fertig 将此次投票失利定性为一场灾难。他指出反对方重复旧论点。真正受损的,是委员会赖以运转的共识规则。
9 张反对票背后:小国委员会投票机制遭质疑
依照 ISO 官方规程,各国家成员体的具体投票记录并不对外公开。非官方汇总显示,投反对票的包括丹麦、西班牙、意大利、日本与瑞典等九国。这份未经官方确认的名单,迅速引发了对代议制机制的审视。
一位波兰国家委员会成员披露了地方分支的运作实况。在投票截止前数日,地方委员会甚至还在为凑齐法定人数而奔波。部分长期成员已更换雇主,联系邮件遭到系统退回。他们的日常技术参与度十分有限。
在现行规则下,每个国家成员体都拥有一票。当争议特性进入外部程序,游说人数寥寥的小委员会,难度远低于说服上百位现场同行。这种机制不对称性,放大了游说的杠杆效应。
标准出路四选一:编译器实现照常但信任已碎
面对历史上首次 DIS 否决,ISO 程序给出了四条可能的处理路径。WG21 可以选择修改草案后发起第二次 DIS 投票,或者退回委员会草案阶段。此外,将合同单独剥离为技术规范(TS),或者直接终止该项目,也是合规选项。
P4238R1 作者之一 J. Daniel Garcia 在 Seacord 的帖子下给出的方案更省事:撤掉一个有争议的特性,标准其余部分很可能就通过了。Vandevoorde 也倾向于从草案中移除合同,只保留库加固相关的调整。这不是技术上的最优解,却是各方算下来最有可能过关的一步。
各国家成员体有 12 周时间提交修改意见,截止时间定在 2027 年 1 月中旬。WG21 将于 2026 年 11 月 16 日在巴西布济奥斯(Búzios)召开会议。Vandevoorde 怀疑最终草案无法在 2026 年内投出,如果拖到 2027 年,「C++27 这个叫法更合理」。在下一版正式出版之前,现行标准依然是 ISO/IEC 14882:2024,也就是 C++23。原定的 C++29 演进规划被迫推迟,议程转为应对此次危机。
主流编译器仍在推进特性实现,现有业务代码短期内无需调整。但 C++26 的发布窗口已陷入不确定。团队在系统设计中,无法再将合同语法语义视作定案。
这场风波暴露的深层危机,在于治理契约的动摇。委员会内部历经辩论形成的表决结果,在外部被游说轻易推翻。这种打破惯例的做法,直接削弱了内部共识的权威。修改文本只需要数月妥协。但要重建对规则的信任,社区需要付出漫长的代价。
参考链接:
- Andreas Fertig 个人博客文章:C++26 DIS failed, how does C++ survive?
- WG21 论文 P4238R1:Returning C++26 for the Evaluation It Skipped
- WG21 论文 P4433R0:Do not remove Contracts from C++26
- WG21 论文 P4334R0 及相关提案讨论
- Robert Seacord 关于 C++26 投票结果的公开通告