From Jason Turner

C++ Standard Evolution Viewer

Explore how the C++ standard evolved across versions with interactive side-by-side diffs

This site provides an interactive way to explore changes in the C++ standard by viewing side-by-side diffs of individual sections (identified by stable names like [array], [class.copy], [ranges.adaptors]).

Each version transition below focuses on Tier 1 sections (major library components and language features) to provide the most educational value.

Choose a Version Transition

C++11 → C++14

858 sections

Refinements to C++11: generic lambdas, relaxed constexpr, variable templates.

C++14 → C++17

1945 sections

Structured bindings, if constexpr, fold expressions, std::optional, std::variant, parallel algorithms.

C++17 → C++20

2660 sections

The big one: concepts, ranges, coroutines, modules, three-way comparison, constexpr everything.

C++20 → C++23

2485 sections

Latest refinements: deducing this, if consteval, multidimensional subscript, ranges improvements.

C++23 → Trunk

2505 sections

Upcoming C++26 features: reflection, contracts, expanded constexpr, and more.

Statistics

10453
Total Diffs Generated
5
Version Transitions
Tier 1
Sections (0-1 dots)

View Detailed Statistics →

About This Project

This site is generated from the cplusplus/draft repository using a custom conversion pipeline that:

  1. Converts LaTeX sources to GitHub Flavored Markdown
  2. Splits chapters by stable names (section identifiers)
  3. Generates diffs between adjacent C++ versions
  4. Renders interactive side-by-side views with diff2html

What are Stable Names?

Stable names are section identifiers used throughout the C++ standard to create consistent references. For example:

Tier 1 sections (0-1 dots in the name) represent major library components and language features, making them ideal for learning how C++ evolved.

Useful Links