! Paper number: P1426 ! Topic: Pull the Plug on Contracts? ! Author: Nathan Myers ! Email: ncm@cantrip.org ! Audience: All of WG21 ## Pull the Plug on Contracts? Contract support necessarily has many moving parts, and affects all programmers, acting in every capacity. To be usable at all, it is essential that its design be simple and coherent. All users of the language, even those less well equipped than our august company, must be able to reason about contract annotations and their implications, both for the meaning of code affected, and for other programmers interacting with that code. As originally proposed, this feature was carefully designed to meet the needs of multiple disparate commmunities of users, without particularly favoring any, and without ignoring any. This was a tricky task, because each detail affects all users. Changes to details that seem to aid one group of users are likely, without very careful consideration and adjustment, to interfere with others' purposes. Since the feature was voted into the Working Draft, it has been subject to proposed revisions by people some of whom, variously, - Have not taken the time to understand its design, or - Focus on their own use to the exclusion of others', or even - Deny the legitimacy of others' uses, or - Have not written production code in many years, or - Do not love simplicity -- or some combination of the above. Some individuals have expressed an opinion that the feature was designed principally for their own use, and that other intended uses are secondary. Let me assure you that every such expression is, at best, sadly mistaken. No one or two uses or commununities were primary. All users are affected by contracts, and all were, at its inception, important. Under the weight of proposed revisions, the coherence of the design, and the possibility of all users understanding the result, is under threat. There is a very real danger that contracts could end up like the present object-initialization semantics, which very few people, today, can honestly claim to understand in detail. (It may be that everyone who does is here, and implementing a compiler.) A Contracts feature that makes the language harder to understand might be worse than entire lack of the feature. This proposal provides an escape hatch for this eventuality. I hope not to need to bring it to a vote. ### Proposal Remove support for Contracts in C++20. Plan to consider a re-unified design for a later Standard.