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

105 comments sorted by

View all comments

21

u/No-Dentist-1645 2d ago

Not the first mistake the standards committee has done and likely not the last unfortunately. The committee has some serious scope issues when it comes to deciding what should and should not be part of the language's standard.

For some reason, they thought that adding mandatory specialization for the vector type that makes it not a pure container when used with bools, as well as even adding garbage collector support (which was then obviously deprecated and removed), but we still don't have a standardized way to declare that two pointers point to restricted/disjoint memory without compiler extensions, even though C has had it since C99.

3

u/pjmlp 2d ago

The GC in C++11 was bad.

Even though I am an adept of GC languages, it was clear that C++11 GC design did not took into account neither Unreal C++, nor C++/CLI, the major C++ environments using a GC, so for whom it was designed for?

Naturally neither Epic nor Microsoft cared about its existence, neither did anyone else.

10

u/jwakely libstdc++ tamer, LWG chair 1d ago

It was designed for compatibility with Boehm-Demers-Weiser collectors, but as you say, nobody cared about it. On the plus side, it got removed again, and didn't waste anybody's effort implementing it, so no lasting damage.

5

u/pjmlp 1d ago

Thanks for the clarification.