A totally constexpr standard library

Speaker: Paul Keir

Audience level: [ Intermediate | Advanced ]

With C++20 constexpr compiler support for dynamic memory allocation, and library support for std::vector/std::string now widely available (MSVC 19.29 (VS16.11), GCC 12.1's standard library (libstdc++), and accessible via Clang), a future C++ standard library can be foreseen, where every function and member function supports constant evaluation.

In this talk we introduce the C'est library project, which adds constexpr support to a range of familiar class templates modelled after the C++ standard library. We highlight an update to the C'est architecture, which aims to simplify the integration of C'est within projects targeting constexpr support. Example projects are also presented including a compile-time compiler (poacher); and Metamath proof database verifier; as well as some more recent developments.

Such parity between compile-time and run-time programming offers advantages in terms of increased programmer productivity; nevertheless, compilation times can increase by a significant factor. To measure progress, we also present CTBench: a set of tools to facilitate comprehensive compile-time benchmarking; based on Clang's time-trace feature.