Design of Concept Libraries for C++

Book Chapter

Sutton, Andrew
Stroustrup, Bjarne

KAUST Grant Number


We present a set of concepts (requirements on template arguments) for a large subset of the ISO C++ standard library. The goal of our work is twofold: to identify a minimal and useful set of concepts required to constrain the library's generic algorithms and data structures and to gain insights into how best to support such concepts within C++. We start with the design of concepts rather than the design of supporting language features; the language design must be made to fit the concepts, rather than the other way around. A direct result of the experiment is the realization that to simply and elegantly support generic programming we need two kinds of abstractions: constraints are predicates on static properties of a type, and concepts are abstract specifications of an algorithm's syntactic and semantic requirements. Constraints are necessary building blocks of concepts. Semantic properties are represented as axioms. We summarize our approach: concepts = constraints + axioms. This insight is leveraged to develop a library containing only 14 concepts that encompassing the functional, iterator, and algorithm components of the C++ Standard Library (the STL). The concepts are implemented as constraint classes and evaluated using Clang's and GCC's Standard Library test suites. © 2012 Springer-Verlag.

Sutton A, Stroustrup B (2012) Design of Concept Libraries for C++. Lecture Notes in Computer Science: 97–118. Available:

Thanks to Matt Austern, Paul McJones, Gabriel Dos Reis, andAlex Stepanov for comments that led to major improvements and will be the basis forfurther work. This project was partially supported by NSF grants A3350-32525-CS andA0040-32525-CS and Award KUS-C1-016-04, made by King Abdullah University ofScience and Technology (KAUST).

Springer Nature

Lecture Notes in Computer Science


Permanent link to this record