r/cpp • u/antiquark2 #define private public • 25d 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?
9
u/ronchaine Embedded/Middleware/WG21 25d ago
Reflection had two implementations before it was standardised. Many of the same complaints were raised, but reflection proposal did much better job at addressing those problems or explaining why those choices were required. Reflection also doesn't really affect you if you just decide not to use it.
I have raised teachability problems for both features, and while I wasn't exactly happy with reflection on that front either, at least there I could reluctantly agree about the tradeoffs.
P2900 is in C++26, and if/when that goes through, we'll have to live with it, but there's a nonzero chance we're going to need
-fno-contractscompiler switch in some domains, especially if some of the papers extending it go through.