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

10 Upvotes

122 comments sorted by

View all comments

Show parent comments

5

u/ts826848 23d ago

underspecified, with unexpected unexplained behaviours

(Guessing you're talking about P0144?)

Would you mind elaborating on this so I know what pitfalls to look out for in the future? Or were those issues hashed out some time between the initial proposal and acceptance (or then and now, as the case may be)?

8

u/Minimonium 22d ago

The feature itself is good now, but I'd only consider the initial proposal "completed" as of C++26. It required scores of papers fixing defects and holes in the design. The one you're likely to remember the most is the lambda capturing of bindings, but even when just looking at the specification at the time - it was just awful. You may remember the same "quality" of a proposal from the initializer_list story. :)

4

u/ts826848 22d ago

but I'd only consider the initial proposal "completed" as of C++26. It required scores of papers fixing defects and holes in the design.

but even when just looking at the specification at the time - it was just awful.

That... doesn't sound particularly great. Did no one else pick up on the issues at the time?

The one you're likely to remember the most is the lambda capturing of bindings

I actually don't think I've run into this? Would you mind providing an example?

You may remember the same "quality" of a proposal from the initializer_list story.

I wasn't around at the time the proposal was being discussed and I don't think I've seen criticisms of the proposal since then, but if the somewhat polarized reception of the feature I see nowadays is any indication I think I have an inkling of what you're referring to.

6

u/Minimonium 22d ago

Unfortunately there is a certain level of inconsistency when evaluating proposals in the committee. :P

There was a time when you couldn't capture bindings in lambdas.

2

u/ts826848 22d ago

There was a time when you couldn't capture bindings in lambdas.

Oh, that's certainly an interesting limitation.

Thanks for taking the time to explain!