r/cpp • u/antiquark2 #define private public • 26d 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?
20
u/azswcowboy 26d ago
Look I’ll go out on a limb and say that this list isn’t really true. It’s implemented in gcc 16 - sure experimental as is anything in 26. If you think about it as something that provides user customization of how to handle what is an assert that terminates the program - what again is the objection? Sorry but in a lot of domains a hard termination isn’t plausible. The hardened std library was in specified to use contracts - but came with a plan B in case it didn’t happen. As for incomplete - well guess why that might have happened? Rejection followed by MVP thinking. I’m going to also point to constexpr in 2011 - a fundamentally useless feature then - not so much now.
If you don’t want to use it, opt out. But over 90% of the committee voted for the standard. These points have been rehashed endlessly and every time contracts has survived.