(Maybe) All The Contract Papers
Some people might say that the upcoming C++ contracts feature is one of the best researched topics in C++. I am not sure I agree, but a lot of work has gone into it.
I hope this gives you an idea of how much work has been done on the topic.
Maybe All The Contract Papers?
This is a, very likely, incomplete list of papers. I sourced it pretty simply. It is the latest revision of all the papers with contracts in the title. And it is all the papers, also those from the version that did not make it into the standard back in C++20.
So it might be some more, or some less papers, probably both. I miss some, and I have some that should not be here. But not too many.
-
2013
-
N3604 - Centralized Defensive-Programming Support for Narrow Contracts
J. Lakos, A. Zakharov -
N3753 - Centralized Defensive-Programming Support for Narrow Contracts (Revision 1)
J. Lakos, A. Zakharov -
N3818 - Centralized Defensive-Programming Support for Narrow Contracts (Revision 2)
J. Lakos, A. Zakharov
-
-
2014
-
N3877 - Centralized Defensive-Programming Support for Narrow Contracts (Revision 3)
J. Lakos, A. Zakharov -
N3963 - Centralized Defensive-Programming Support for Narrow Contracts (Revision 4)
J. Lakos, A. Zakharov -
N3997 - Centralized Defensive-Programming Support for Narrow Contracts (Revision 5)
J. Lakos, A. Zakharov, A. Beels -
N4075 - Centralized Defensive-Programming Support for Narrow Contracts (Revision 5)
J. Lakos, A. Zakharov, A. Beels -
N4110 - Exploring the design space of contract specifications for C++
J. Daniel Garcia -
N4135 - Language Support for Runtime Contract Validation (Revision 8)
J. Lakos, A. Zakharov, A. Beels, N. Myers -
N4253 - Language Support for Runtime Contract Validation (Revision 9)
J. Lakos, A. Zakharov, A. Beels, N. Myers -
N4289 - Library support for runtime contract violations
Nathan Myers -
N4290 - Language support for optional contract violations
Nathan Myers -
N4293 - C++ language support for contract programming
J. Daniel Garcia -
N4319 - Contracts for C++: What are the Choices
Gabriel Dos Reis, Shuvendu Lahiri, Francesco Logozzo, Thomas Ball, Jared Parsons
-
-
2015
-
N4378 - Language Support for Contract Assertions
John Lakos, Nathan Myers, Alexei Zakharov, Alexander Beels -
N4379 - FAQ about N4378, Language Support for Contract Assertions
John Lakos, Nathan Myers -
N4415 - Simple Contracts for C++
Gabriel Dos Reis, J. Daniel Garcia, Francesco Logozzo, Manuel Fahndrich, Shuvendu Lahri -
N4435 - Proposing Contract Attributes
Walter Brown -
P0147R0 - The Use and Implementation of Contracts
Lawrence Crowl -
P0166R0 - Three interesting questions about contracts
J. Daniel Garcia
-
-
2016
-
P0246R0 - Contract Assert Support Merged Proposal
Nathan Myers -
P0247R0 - Criteria for Contract Support
Nathan Myers -
P0287R0 - Simple Contracts for C++
Gabriel Dos Reis -
P0380R1 - A Contract Design
G. Dos Reis, J. D. Garcia, J. Lakos, A. Meredith, N. Myers, B. Stroustrup -
P0516R0 - Clarify That shared_future’s Copy Operations have Wide Contracts
Bryce Adelstein Lelbach
-
-
2018
-
P0542R5 - Support for contract based programming in C++
J. Daniel Garcia -
P0788R3 - Standard Library Specification in a Concepts and Contracts World
Walter E. Brown -
P1043R0 - Narrow contracts in string_view versus P0903R1
Andrzej Krzemieński, Nevin Liber -
P1289R1 - Access control in contract conditions
J. Daniel Garcia, Ville Voutilainen -
P1296R0 - [[assert: std::disjoint(A,nA, B,nB)]: Contract assertions as an alternate spelling of ‘restrict’^]
Phil Miller, Justin Szaday -
P1321R0 - UB in contract violations
Ville Voutilainen -
P1332R0 - Contract Checking in C++: A (long-term) Road Map
Joshua Berne, Nathan Burgers, Hyman Rosen, John Lakos -
P1333R0 - Assigning Concrete Semantics to Contract-Checking Levels at Compile Time
Joshua Berne, John Lakos -
P1334R0 - Specifying Concrete Semantics Directly in Contract-Checking Statements
Joshua Berne, John Lakos -
P1335R0 - "Avoiding undefined behavior in contracts" [P1290R0 Explained^]
John Lakos
-
-
2019
-
P1290R3 - Avoiding undefined behavior in contracts
J. Daniel Garcia, Ville Voutilainen -
P1320R2 - Allowing contract predicates on non-first declarations
Ville Voutilainen -
P1323R2 - Contract postconditions and return type deduction
Hubert S.K. Tong -
P1355R2 - Exposing a narrow contract for ceil2
Chris Kennelly -
P1421R0 - Assigning semantics to different Contract Checking Statements
Andrzej Krzemienski -
P1426R0 - Pull the Plug on Contracts?
Nathan Myers -
P1429R3 - Contracts That Work
Joshua Berne, John Lakos -
P1448R0 - Simplifying Mixed Contract Modes
Nathan Burgers -
P1486R1 - United Amendment to Contracts Facility for C++20
John Lakos -
P1487R0 - User Experience with Contracts That Work
John Lakos -
P1490R0 - Contract-Related Issues
Andrzej Krzemieński -
P1517R0 - Contract Requirements for Iterative High-Assurance Systems
Ryan McDougall -
P1606R0 - Requirements for Contract Roles
Joshua Berne -
P1607R1 - Minimizing Contracts
Joshua Berne, Jeff Snyder, Ryan McDougall -
P1625R0 - Contracts: why the house is not on fire (i.e. why the status quo is tolerable)
Ville Voutilainen -
P1639R0 - Unifying source_location and contract_violation
Corentin Jabot -
P1670R0 - Side Effects of Checked Contracts and Predicate Elision
Joshua Berne, Alisdair Meredith -
P1671R0 - Contract Evaluation in Constant Expressions
Joshua Berne, Alisdair Meredith -
P1680R0 - Implementing Contracts in GCC
Andrew Sutton, Jeff Chapman -
P1704R0 - Undefined functions in axiom-level contract statements
Andrzej Krzemieński, Joshua Berne -
P1710R0 - Adding a global contract assumption mode
Ville Voutilainen -
P1711R0 - What to do about contracts?
Bjarne Stroustrup -
P1728R0 - Preconditions, axiom-level contracts and assumptions — an in depth study
Andrzej Krzemieński -
P1730R0 - Adding a global contract assumption mode
Hyman Rosen, John Lakos, Alisdair Meredith -
P1743R0 - Contracts, Undefined Behavior, and Defensive Programming
Rostislav Khlebnikov, John Lakos -
P1744R0 - Avoiding Misuse of Contract-Checking
Rostislav Khlebnikov, John Lakos -
P1769R0 - The "default" contract build-level and continuation-mode should be implementation-defined
Ville Voutilainen -
P1773R0 - Contracts have failed to provide a portable "assume"
Timur Doumler -
P1782R1 - Local contract restrictions
S. Davis Herring -
P1786R0 - Adding a global contract assumption mode
Hyman Rosen, John Lakos, Alisdair Meredith -
P1793R0 - Simplifying Contract Syntax
Alisdair Meredith -
P1807R0 - An Overview of Contracts Papers for Cologne
Joshua Berne -
P1812R0 - Axioms should be assumable: a minimal fix for contracts
Timur Doumler, Ville Voutilainen -
P1823R0 - Remove Contracts from C++20
Nicolai Josuttis, Ville Voutilainen, Roger Orr, Daveed Vandevoorde, John Spicer, Christopher Di Bella -
P1893R0 - Proposal of Contract Primitives
Andrew Tomazos
-
-
2020
-
P1995R1 - Contracts - Use Cases
Joshua Berne, Andrzej Krzemienski, Ryan McDougall, Timur Doumler, Herb Sutter -
P2032R0 - Contracts - What Came Before
Joshua Berne -
P2038R0 - Proposed nomenclature for contract-related proposals
Andrzej Krzemieński, Ryan McDougall -
P2076R0 - Previous disagreements on Contracts
Ville Voutilainen -
P2114R0 - Minimial Contract Use Cases
Joshua Berne, Ryan McDougall, Andrzej Krzemieński -
P2182R1 - Contract Support: Defining the Minimum Viable Feature Set
Andrzej Krzemieński, Joshua Berne, Ryan McDougall -
P2185R0 - Contracts Use Case Categorization
Caleb Sunstrum
-
-
2021
-
P2339R0 - Contract violation handlers
Andrzej Krzemieński -
P2358R0 - Defining Contracts
Gašper Ažman, John McFarlane, Bronek Kozicki -
P2376R0 - Comments on Simple Statistical Functions (p1708r4): Contracts, Exceptions and Special cases
Johan Lundberg -
P2388R4 - Minimum Contract Support: either No_eval or Eval_and_abort
Andrzej Krzemieński, Gašper Ažman -
P2461R1 - Closure-based Syntax for Contracts
Gašper Ažman, Caleb Sunstrum, Bronek Kozicki -
P2466R0 - The notes on contract annotations
Andrzej Krzemieński
-
-
2022
-
2023
-
P2487R1 - Is attribute-like syntax adequate for contract annotations?
Andrzej Krzemieński -
P2521R5 - Contract support — Record of SG21 consensus
Andrzej Krzemieński -
P2570R2 - Contract predicates that are not predicates
Andrzej Krzemieński -
P2659R2 - A Proposal to Publish a Technical Specification for Contracts
Brian Bi, Alisdair Meredith -
P2680R1 - Contracts for C++: Prioritizing Safety
Gabriel Dos Reis -
P2695R1 - A proposed plan for contracts in C++
Timur Doumler, John Spicer -
P2700R1 - Questions on P2680 "Contracts for C++: Prioritizing Safety"
Timur Doumler, Andrzej Krzemieński, John Lakos, Joshua Berne, Brian Bi, Peter Brett, Oliver Rosten, Herb Sutter -
P2737R0 - Proposal of Condition-centric Contracts Syntax
Andrew Tomazos -
P2743R0 - Contracts for C++: Prioritizing Safety - Presentation slides of P2680R0
Gabriel Dos Reis -
P2751R1 - Evaluation of Checked Contracts
Joshua Berne -
P2756R0 - Proposal of Simple Contract Side Effect Semantics
Andrew Tomazos -
P2784R0 - Not halting the program after detected contract violation
Andrzej Krzemieński -
P2811R7 - Contract-Violation Handlers
Joshua Berne -
P2817R0 - The idea behind the contracts MVP
Andrzej Krzemieński -
P2829R0 - Proposal of Contracts Supporting Const-On-Definition Style
Andrew Tomazos -
P2831R0 - Functions having a narrow contract should not be noexcept
Timur Doumler, Ed Catmur -
P2834R1 - Semantic Stability Across Contract-Checking Build Modes
Joshua Berne, John Lakos -
P2838R0 - Unconditional contract violation handling of any kind is a serious problem
Ville Voutilainen -
P2852R0 - Contract violation handling semantics for the contracts MVP
Tom Honermann -
P2853R0 - Proposal of std::contract_violation
Andrew Tomazos -
P2858R0 - Noexcept vs contract violations
Andrzej Krzemieński -
P2861R0 - The Lakos Rule: Narrow Contracts And
noexceptAre Inherently Incompatible
John Lakos -
P2877R0 - Contract Build Modes and Semantics
Joshua Berne, Tom Honermann -
P2885R3 - Requirements for a Contracts syntax
Timur Doumler, Joshua Berne, Gašper Ažman, Andrzej Krzemieński, Ville Voutilainen, Tom Honermann -
P2890R2 - Contracts on lambdas
Timur Doumler -
P2896R0 - Outstanding design questions for the Contracts MVP
Timur Doumler -
P2935R4 - An Attribute-Like Syntax for Contracts
Joshua Berne -
P2947R0 - Contracts must avoid disclosing sensitive information
Andrei Zissu, Ran Regev, Gal Zaban, Inbal Levi -
P2949R0 - Slides for P2861R0: Narrow Contracts and
noexceptare Inherently Incompatable
John Lakos -
P2954R0 - Contracts and virtual functions for the Contracts MVP
Ville Voutilainen -
P2961R2 - A natural syntax for Contracts
Timur Doumler, Jens Maurer -
P2969R0 - Contract annotations are potentially-throwing
Timur Doumler, Ville Voutilainen, Tom Honermann -
P3028R0 - An Overview of Syntax Choices for Contracts
Joshua Berne, Gašper Ažman, Rostislav Khlebnikov, Timur Doumler -
P3066R0 - Allow repeating contract annotations on non-first declarations
Timur Doumler -
P3071R1 - Protection against modifications in contracts
Jens Maurer
-
-
2024
-
P2755R1 - A Bold Plan for a Complete Contracts Facility
Joshua Berne, Jake Fevold, John Lakos -
P2894R2 - Constant evaluation of Contracts
Timur Doumler -
P2932R3 - A Principled Approach to Open Design Questions for Contracts
Joshua Berne -
P2957R2 - Contracts and coroutines
Andrzej Krzemieński, Iain Sandoe, Joshua Berne, Timur Doumler -
P3073R0 - Remove evaluation_undefined_behavior and will_continue from the Contracts MVP
Timur Doumler, Ville Voutilainen -
P3079R0 - Should ignore and observe exist for constant evaluation of contracts?
Oliver Rosten -
P3088R1 - Attributes for contract assertions
Timur Doumler, Joshua Berne -
P3102R0 - Refining Contract Violation Detection Modes
Joshua Berne -
P3113R0 - Slides: Contract assertions, the noexcept operator, and deduced exception specifications
Timur Doumler -
P3114R0 - noexcept(contract_assert()) — slides
_Andrzej Krzemieński -
P3119R1 - Tokyo Technical Fixes to Contracts
Joshua Berne -
P3165R0 - Contracts on virtual functions for the Contracts MVP
Ville Voutilainen -
P3169R0 - Inherited contracts
Jonas Persson -
P3183R1 - Contract testing support
Bengt Gustafsson -
P3189R0 - Slides for LEWG presentation of P2900R6: Contracts for C++
Timur Doumler, Joshua Berne, Andrzej Krzemieński -
P3190R0 - Slides for EWG presentation of D2900R7: Contracts for C++
Timur Doumler, Joshua Berne, Andrzej Krzemieński -
P3191R0 - Feedback on the scalability of contract violation handlers in P2900
Louis Dionne, Yeoul Na, Konstantin Varlamov -
P3197R0 - A response to the Tokyo EWG polls on the Contracts MVP (P2900R6)
Timur Doumler, John Spicer -
P3198R0 - A takeaway from the Tokyo LEWG meeting on Contracts MVP
Andrzej Krzemieński -
P3204R0 - Why Contracts?
Joshua Berne -
P3205R0 - Throwing from a
noexceptfunction should be a contract violation.
Gašper Ažman, Jeff Snyder, Andrei Zissu, Ben Craig -
P3212R0 - The contract of sort()
Andrzej Krzemieński -
P3221R0 - Disable pointers to contracted functions
Jonas Persson -
P3226R0 - Contracts for C++: Naming the "Louis semantic"
Timur Doumler -
P3227R1 - Fixing the library API for contract violation handling
Gašper Ažman, Timur Doumler -
P3228R1 - Contracts for C++: Revisiting contract check elision and duplication
Timur Doumler -
P3237R2 - Matrix Representation of Contract Semantics
Andrei Zissu -
P3238R0 - An alternate proposal for naming contract semantics
Ville Voutilainen -
P3249R0 - A unified syntax for Pattern Matching and Contracts when introducing a new name
Ran Regev -
P3250R0 - C++ contracts with regards to function pointers
Peter Bindels -
P3251R0 - C++ contracts and coroutines
Peter Bindels -
P3257R0 - Make the predicate of contract_assert more regular
Jens Maurer -
P3261R2 - Revisiting
const-ification in Contract Assertions
Joshua Berne -
P3265R3 - Ship Contracts in a TS
Ville Voutilainen -
P3267R1 - Approaches to C++ Contracts
Peter Bindels, Tom Honermann -
P3268R0 - C++ Contracts Constification Challenges Concerning Current Code
Peter Bindels -
P3269R0 - Do Not Ship Contracts as a TS
Timur Doumler, John Spicer -
P3270R0 - Repetition, Elision, and Constification w.r.t. contract_assert
John Lakos, Joshua Berne -
P3271R1 - Function Types with Usage (Contracts for Function Pointers)
Lisa Lippincott -
P3276R0 - P2900 Is Superior to a Contracts TS
Joshua Berne, Steve Downey, Jake Fevold, Mungo Gill, Rostislav Khlebnikov, John Lakos, and Alisdair Meredith -
P3285R0 - Contracts: Protecting The Protector
Gabriel Dos Reis -
P3297R1 - C++26 Needs Contract Checking
Ryan McDougall, Jean-Francois Campeau, Christian Eltzschig, Mathias Kraus, Pez Zarifian -
P3311R0 - An opt-in approach for integration of traditional assert facilities in C++ contracts
Tom Honermann -
P3317R0 - Compile time resolved contracts
Jonas Persson -
P3321R0 - Contracts Interaction With Tooling
Joshua Berne -
P3327R0 - Contract assertions on function pointers
Timur Doumler -
P3328R0 - Observable Checkpoints During Contract Evaluation
Joshua Berne -
P3336R0 - Usage Experience for Contracts with BDE
Joshua Berne -
P3343R0 - Contracts - What are we doing here (EWG Presentation)
Joshua Berne -
P3344R0 - Virtual Functions on Contracts (EWG - Presentation for P3097)
Joshua Berne, Timur Doumler, Lisa Lippincott -
P3361R1 - Class invariants and contract checking philosophy
Esa Pulkkinen -
P3362R0 - Static analysis and 'safety' of Contracts, P2900 vs. P2680/P3285
Ville Voutilainen -
P3376R0 - Contract assertions versus static analysis and 'safety'
Andrzej Krzemieński -
P3386R1 - Static Analysis of Contracts with P2900
Joshua Berne -
P3387R0 - Contract assertions on coroutines
Timur Doumler, Joshua Berne, Iain Sandoe, Peter Bindels -
P3460R0 - Contracts Implementors Report
Eric Fiselier, Nina Dinka Ranns, Iain Sandoe -
P3483R1 - Contracts for C++: Pre-Wroclaw technical clarifications
Timur Doumler, Joshua Berne -
P3502R0 - Slides for D2900R11 - Contracts for C++
Timur Doumler -
P3520R0 - Wroclaw Technical Fixes to Contracts
Timur Doumler, Joshua Berne, Andrzej Krzemieński
-
-
2025
-
P2899R1 - Contracts for C++ - Rationale
Timur Doumler, Joshua Berne, Andrzej Krzemieński, Rostislav Khlebnikov -
P2900R14 - Contracts for C++
Joshua Berne, Timur Doumler, Andrzej Krzemieński -
P3100R5 - Implicit contract assertions
Timur Doumler, Joshua Berne -
P3229R1 - Making erroneous behaviour compatible with Contracts
Timur Doumler, Joshua Berne, Gašper Ažman -
P3417R1 - Handling exceptions thrown from contract predicates
Gašper Ažman, Timur Doumler -
P3499R1 - Exploring strict contract predicates
Timur Doumler, Lisa Lippincott, Joshua Berne -
P3500R1 - Are Contracts "safe"?
Timur Doumler, Gašper Ažman, Joshua Berne, Ryan McDougall -
P3558R1 - Core Language Contracts By Default
Joshua Berne, John Lakos -
P3573R0 - Contract concerns
Bjarne Stroustrup, Michael Hava, J. Daniel Garcia Sanchez, Ran Regev, Gabriel Dos Reis, John Spicer, J.C. van Winkel, David Vandevoorde, Ville Voutilainen -
P3577R0 - Require a non-throwing default contract-violation handler
John Lakos -
P3582R0 - Observed a contract violation? Skip subsequent assertions!
Andrzej Krzemieński -
P3583R0 - Contracts, Types & Functions
Jonas Persson -
P3591R0 - Contextualizing Contracts Concerns
Joshua Berne, Timur Doumler -
P3599R0 - Initial Implicit Contract Assertions
Joshua Berne, Timur Doumler -
P3608R0 - Contracts and profiles: what can we reasonably ship in C++26
Ville Voutilainen -
P3616R0 - Remove contracts on virtual functions for now
Ville Voutilainen -
P3640R0 - Make contracts reliable by default
Jonas Persson -
P3819R0 - Remove evaluation_exception() from contract-violation handling for C++26
Peter Bindels, Joshua Berne, Timur Doumler, Iain Sandoe, Eric Fiselier -
P3829R0 - Contracts do not belong in the language
David Chisnall, John Spicer, Gabriel Dos Reis, Ville Voutilainen, Jose Daniel Garcia Sanchez -
P3831R0 - Contract Labels Should Use Annotation Syntax
Yihe Li -
P3835R0 - Contracts make C++ less safe — full stop
John Spicer, Ville Voutilainen, Jose Daniel Garcia Sanchez -
P3849R1 - SIS/TK611 considerations on Contract Assertions
Harald Achitz -
P3851R0 - Position on contracts assertion for C++26
J. Daniel Garcia, Jose Gomez, Raul Huertas, Javier Lopez-Gomez, Jesus Martinez, Francisco Palomo, Victor Sanchez -
P3853R0 - A thesis+antithesis=synthesis rumination on Contracts
Ville Voutilainen -
P3878R0 - C++26 Contracts are not a good fit for standard library hardening
Ville Voutilainen, Jonathan Wakely, John Spicer -
P3889R0 - A minimal solution for contracts, or, what is an MVP?
Harald Achitz -
P3893R0 - The CppCon 2025 Talk on Contracts and CodeQL in Context
Mike Fairhurst -
P3896R0 - Design goals for a contract support facility
Andrzej Krzemieński -
P3909R0 - Contracts should go into a White Paper - even at this late point
Ville Voutilainen -
P3910R0 - Improving safety of C++26 contracts
Bengt Gustafsson -
P3912R0 - Design considerations for always-enforced contract assertions
Timur Doumler, Joshua Berne, Gašper Ažman, Oliver Rosten, Lisa Lippincott, Peter Bindels -
P3919R0 - Guaranteed-(quick-)enforced contracts
Ville Voutilainen
-
-
2026
-
P3097R2 - Contracts for C++: Virtual functions
Timur Doumler, Joshua Berne -
P3098R2 - Contracts for C++: Postcondition captures
Timur Doumler, Gašper Ažman, Joshua Berne -
P3099R2 - Contracts for C++: User-defined diagnostic messages
Timur Doumler, Peter Bindels, Joshua Berne -
P3290R4 - Integrating Existing Assertions With Contracts
Joshua Berne, Timur Doumler, John Lakos -
P3400R3 - Controlling Contract-Assertion Properties
Joshua Berne -
P3846R1 - C++26 Contracts, reasserted
Timur Doumler, Joshua Berne -
P3850R0 - A proposed plan for extending Contracts in C++29
Timur Doumler, Joshua Berne -
P3911R2 - RO 2-056 6.11.2 [basic.contract.eval Make Contracts Reliably Non-Ignorable^]
Darius Neațu, Andrei Alexandrescu, Lucian Radu Teodorescu, Radu Nichita, Herb Sutter -
P3967R0 - Dual compiles of functions with contracts
Bengt Gustafsson -
P3968R0 - A Framework For Contracts
Bengt Gustafsson -
P3977R0 - A New Taxonomy for Contracts
Oliver Rosten -
P4005R0 - A proposal for guaranteed-(quick-)enforced contracts
Ville Voutilainen -
P4009R0 - A proposal for solving all of the contracts concerns
Ville Voutilainen -
P4011R0 - Redefining narrow contract
Matthias Kretz -
P4015R0 - Enforcing Contract Conditions with Statements
Lisa Lippincott -
P4020R0 - Concerns about contract assertions
Andrzej Krzemieński -
P4043R0 - Are C Contracts Ready to Ship in C26?
Darius Neațu -
P4044R0 - Just
pre!. Mandatory precondition for contracts.
Lucian Radu Teodorescu -
P4208R0 - Info: C++ Contracts on Trial - Does P2900 Survive Cross-Examination?
Vinnie Falco
-
Summary
Was it worth the effort? For some people for sure, for others probably not. Experience from real-world projects tells me that the more complicated and controversial a topic becomes, the harder it is to get a good outcome. But of course, only the future will tell.
Disclaimer
This post was written by a human. AI was used for language polishing.