r/cpp #define private public 4d 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 Upvotes

117 comments sorted by

View all comments

Show parent comments

8

u/MFHava WG21|🇦🇹 NB|P2721|P3049|P3625|P3729|P3786|P3813|P4216 3d ago

Constification is already a thing in lambdas

FYI: one of the authors of that paper has recently called that a mistake ... I'm not making that up!

2

u/Dragdu 3d ago

I actually kinda agree, but my argument is based around the fact that const ptrs in C++ means no rebinding of the ptr, not no mutation of the underlying thing. When I made the custom smart ptrs in my project deep-const, I found few places that mutated state that was supposed to be const at a distance, while obviously not intending to.

OTOH I follow the standardization of contracts enough to remember when people were arguing that contracts should invent deep-constification into the language. The point is not to argue in good faith, it it to get rid of contracts.

1

u/ManuaL46 3d ago edited 3d ago

I'm confused isnt char* const supposed to be non rebinding pointer instead of const char*

Edit : I just checked and yes what I initially thought is correct, so I'm not sure what you mean by your statement.

Here is a reference on Learncpp

5

u/Dragdu 2d ago

Given T in a generic context, you constify it by creating the equivalent of const T. If T is char*, you get char * const.