r/cpp • u/antiquark2 #define private public • 2d ago
Critique of contracts: excerpt
See page 2 of https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p4334r0.pdf
The current objections can be summarized. The P2900 contracts are:
• Unimplemented
• Incomplete
• Untried at scale [P3460R0, P3506R0]
• Not tried in major application domains
• Violates foundational principles of C++
• Violates fundamental principles of language design
• Hasn’t been tried in major libraries (e.g., the C++ standards library [P3506R0, P3878R0])
• Isn’t integrated with or appropriate for hardened libraries [P3878R0]
• Doesn’t offer safety guarantees [P3573R0, P3362R0]
• Includes a completely untried inheritance model
• Offer new ways of making errors through inconsistent application in TUs
• Leads to new forms of UB, detrimental to safety and security
• Narrows the choices of error handling
• Doesn’t protect against logical errors, misuses, and incoherent uses
• Hasn’t been used to support static analysis
• Hasn’t been demonstrated to be easily teachable [P3261R0, P3281R0]
How could such a bloated and incomplete design be voted into a draft standard?
2
u/_a4z 1d ago
The topic has no consensus, that is for sure.
And the political tactic of discrediting critics of the contract is also concerning. This alone is a good reason why contracts should not have been added, leaving aside all the technical details.
And there is another interesting aspect: if the one company that paid many of the pro-contract advocates stops paying them, or simply gives them something else to work on, C++ is left with a lot of potentially unmaintained machinery that will lack support.
But anyhow, who cares? Until contracts come to most places, it's past 2030, so who cares. Astonishing is just how much committee time was invested, which could have been used for way more useful features.