// toolset / matrix

C++26 compiler support

Per-feature, per-compiler support for C++26 reflection and adjacent papers. Cells in the per-example groups link to runnable Compiler Explorer URLs we re-verify on every publish.

Reading the matrix. The first table is paper-level feature status across compilers we test. The remaining tables are per-post: each row is one example file from a wro.cpp post, each cell is a runnable Compiler Explorer link under that compiler. Green cells compile and run cleanly today; greyed-out cells were not attempted yet under that compiler.

Compilers we track.clang-p2996 = the Bloomberg fork (the C++26 reflection reference implementation), invoked with-std=c++26 -freflection-latest -stdlib=libc++.GCC 16.1 = mainline GCC 16.1 (released April 2026), invoked with -std=c++26 -freflection. MSVC and EDG are listed in the paper-level table for reference but we do not yet run examples against them.

Standard features (paper-level)

Example / featureclang-p2996GCC 16.1
P2996 — ReflectionGCC 16.1 ships <meta>; clang-p2996 ships <experimental/meta> (alias for <meta>).worksworks
P3394 — Annotations for reflectionGCC 16.1 spells the query `annotations_of_with_type`; clang-p2996 spells it `annotation_of_type`. Source-level divergence.workspartial
P3096 — Function parameter reflectionBoth compilers expose parameter info via parameters_of().worksworks
P1306 — Expansion statements (`template for`)First-class `template for` shipped with the reflection cluster.worksworks
P3560 — Reflection error handlingStandardised exception type for failed reflection queries.worksworks
P2900 — ContractsPolitically hot. Brno (June 2026) and Helsinki (November 2026) likely to refine. No production use.experimentalexperimental
P2300 — std::execution (senders/receivers)Reference impl is libstdexec; mainline standard-library support still landing.partialpartial

why-cpp26-reflection-matters

Example / featureclang-p2996GCC 16.1
40-line JSON serializer with reflectionworksworks
Peel-first variant — first iteration hoisted to compile timeworksworks
Annotated serializer — rename, skip, skip-if-empty, rename_allworksuntested
One reflection walk, three formats: JSON · YAML · XMLworksuntested

first-reflection

Example / featureclang-p2996GCC 16.1
Describeworksworks

splicing

Example / featureclang-p2996GCC 16.1
Splice basicsworksuntested

template-for-expansion-statements

Example / featureclang-p2996GCC 16.1
Dumpworksuntested

enum-to-string

Example / featureclang-p2996GCC 16.1
Renumuntestedworks

auto-formatter

Example / featureclang-p2996GCC 16.1
Formatteruntestedworks
Formatter customworksuntested
Formatter enumworksuntested
Formatter optionalworksuntested
Formatter skipworksuntested

derive-eq-hash

Example / featureclang-p2996GCC 16.1
Hash demountestedworks

json-naive

Example / featureclang-p2996GCC 16.1
Rjsonuntestedworks

json-deserialize

Example / featureclang-p2996GCC 16.1
From valuesuntestedworks

dependency-injection

Example / featureclang-p2996GCC 16.1
Di demountestedworks

auto-mocks

Example / featureclang-p2996GCC 16.1
Mock demountestedworks

define-aggregate

Example / featureclang-p2996GCC 16.1
Pickuntestedworks

cross-language-comparison

Example / featureclang-p2996GCC 16.1
Mainuntestedworks

reflect-arbitrary

Example / featureclang-p2996GCC 16.1
Arbitraryuntestedworks

reflect-optics

Example / featureclang-p2996GCC 16.1
Opticsuntestedworks

reflect-dx

Example / featureclang-p2996GCC 16.1
Natvis emituntestedworks

reflect-soa

Example / featureclang-p2996GCC 16.1
Soauntestedworks

gcc-16-hands-on

Example / featureclang-p2996GCC 16.1
GCC 16.1 reflection hands-onworksworks

vector-consteval-or-constexpr

Example / featureclang-p2996GCC 16.1
Promote a consteval vector to a constexpr spanworksworks

sanitizers-2026

Example / featureclang-p2996GCC 16.1
Reflection-driven binary parser at trust boundaryworksuntested

profiling-cpp-2026

Example / featureclang-p2996GCC 16.1
Auto-trace every annotated method (clang-p2996)worksuntested

memory-safety-cpp26-and-beyond

Example / featureclang-p2996GCC 16.1
Reflection-driven basic safety profile (clang-p2996)worksuntested
cppfront -- safety by default (executes via godbolt CMake tree)worksuntested

testing-for-safety-2026

Example / featureclang-p2996GCC 16.1
arbitrary<T> + round-trip property tests (clang-p2996)worksuntested
pretty_diff field-level test diagnostics (clang-p2996)worksuntested

annotations

Example / featureclang-p2996GCC 16.1
Annotatedworksuntested

one-codegen-many-formats

Example / featureclang-p2996GCC 16.1
Formats demoworksuntested

clap-for-cpp

Example / featureclang-p2996GCC 16.1
Cli demoworksuntested
Cli bitflagworksuntested
Cli type axisworksuntested

tiny-orm

Example / featureclang-p2996GCC 16.1
Sql genworksuntested

hello-sender

Example / featureclang-p2996GCC 16.1
Hello senderworksworks

structured-concurrency

Example / featureclang-p2996GCC 16.1
When allworksworks

embed-the-file

Example / featureclang-p2996GCC 16.1
Embed demountestedworks

brno-quality-of-life

Example / featureclang-p2996GCC 16.1
Designated basesworksworks
Map getworksworks
Postfix defaultworksworks

format-smart-pointers

Example / featureclang-p2996GCC 16.1
As addressworksworks
As valueworksworks
Custom formatterworksworks

cpp26-string-improvements

Example / featureclang-p2996GCC 16.1
Bitset svworksworks
Concatworksworks
Stringstream svworksworks

Methodology

Per-example cells are auto-derived fromscripts/shorten-examples.py runs against the godbolt API. Each successful site build reflects the latest verified state; the "last regenerated" date in the badge above is the modification time of src/data/godbolt-permalinks.yml.

Paper-level cells in the top table are hand-curated fromsrc/data/compatibility-features.yml and refreshed quarterly (or on major compiler releases). When a new ISO C++ paper ships across compilers, it lands here first, then radiates into the per-example tables once a wro.cpp post covers it.

See also: how we test, in general.