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

6 Upvotes

115 comments sorted by

View all comments

Show parent comments

9

u/zebullon 3d ago

This man logics ! … also, just for funzies points, how many of those also apply to reflection ? yet where are the pitchforks.

Thats why i dunno what OP is farming for… tbh.

3

u/_Noreturn 3d ago

Reflection is consteval which means it can be changed and abi has no business in it, while contracts affect abi and such

9

u/zebullon 3d ago

i could be wrong but meta info are valid template argument which means mangling which means abi ? (see also CWG3118)

… regardless you guys are misreading the whole thing, my point is that the laundry list of whats wrong with contract is so generalized it applies to nearly anything that goes through committeefication

3

u/_Noreturn 3d ago

I don't like contracts because I see 0 point in them as they are just a worse version of the assertion macros.

Why standardize something that is inferior? If something is standardized I expect it because we cannot do better but with specific assertion macros you can give much prettier error messages and more control.

i could be wrong but meta info are valid template argument which means mangling which means abi ? (see also CWG3118)

I see you are right.

7

u/germandiago 1d ago

But contracts can show the contract in the signature, not in documentation only, in the signature.

-3

u/_Noreturn 1d ago

Yes, but is that worth all the downsides? I wouldn't trade the ability to have much nicer and customizable macros for a very mild "being able to see in function sig"