// all entries

Posts

Flagship technical posts and short-form community items, newest first.

/ short

WG21 Brno: with C++26 done, the committee turns to undefined behavior

The WG21 Brno meeting (June 8-13, 2026) was the first since C++26 was finalized, and per Herb Sutter's trip report the theme is unmistakable: catalogue and eliminate undefined behavior, push memory-safety profiles toward C++29, and finish the pieces the C++26 MVP deferred. Reflection, the headline of C++26, was not on the marquee -- and that is exactly what shipping looks like.

  • #news
  • #cpp
  • #wg21
  • #brno
/ flagship /cpp26-reflection 18/18

Reflection across languages: C++26 vs Rust, C#, Java, TypeScript, Go, Python

Capstone: the canonical reflection tasks — serialize, enum↔string, CLI parsing, ORM row binding — side by side in seven mainstream languages. Where C++ lands, and what the uniquely-C++ angle actually gives you.

  • #reflection
  • #cpp26
  • #comparison
  • #rust
/ short

CUDA 13.3: tile programming in C++ without the boilerplate

NVIDIA CUDA 13.3 (May 26) adds C++ tile programming: declarative tile abstractions replace manual shared memory, synchronization, and indexing. CompileIQ autotuning uses evolutionary algorithms to tune tile sizes and memory layout per kernel (up to 15% speedup on GEMM/attention). Works on Hopper and all other supported architectures.

  • #news
  • #cuda
  • #gpu
  • #performance
/ flagship /cpp26-reflection 17/18

Replacing Qt's MOC with reflection

Qt's Meta-Object Compiler parses Q_OBJECT/Q_PROPERTY declarations and emits glue code. With C++26 reflection, Q_PROPERTY-equivalent becomes a library pattern — no external compiler, no generated files.

  • #reflection
  • #cpp26
  • #qt
  • #moc
/ short

Could C++ handle an ABI break? The 2026 case

Two pieces dropped in the same week: Luis Caro Campos' CppCon 2025 talk arguing package managers make ABI breaks manageable, and an HFT University article claiming a 58x P99 latency gap between Rust's and C++'s stdlib. The ABI debate is back. Here is what both sides are saying, and what C++26 shipped despite the constraint.

  • #news
  • #cpp26
  • #abi
  • #stdlib
/ short

The fastest JVM is the C++26 compiler

Koen Samyn's BeCPP talk used std::meta::substitute to transform Java bytecode into executable C++ at compile time. The compiler constant-folds the entire program. The loop doesn't run faster. It doesn't exist. This is reflection used not for serialization or enum-to-string, but as a compile-time metaprogramming substrate for building language interpreters.

  • #news
  • #cpp26
  • #p2996
  • #reflection
/ flagship /cpp26-reflection 16/18

define_aggregate: synthesising types at compile time

TypeScript's Pick, Omit, and Partial have direct C++26 equivalents. define_aggregate lets you construct a new type from a list of member specs — opening up type-level programming that was previously pure metaprogramming wizardry.

  • #reflection
  • #cpp26
  • #type-synthesis
  • #define_aggregate
/ short

C++ modules in 2026: import std works, import boost is coming, your IDE still can't

import std compiles on GCC 16.1, Clang 18+, and MSVC. Boost has a per-library module prototype showing 45% build-time reductions. But CMake support is still experimental, clangd needs a full rebuild on module changes, IntelliSense has been 'experimental' for seven years, and almost no libraries ship module definitions. For reflection users: PCH is faster than modules on GCC 16.1 today.

  • #news
  • #cpp26
  • #modules
  • #import-std
/ short

C++: The Documentary is now on YouTube

CultRepo's 'C++: The Documentary' had its world premiere on May 28 in New York and is now available worldwide on YouTube. The film traces C++ from Bell Labs in 1979 through the language's role in modern infrastructure. Sponsored by Hudson River Trading.

  • #news
  • #community
  • #history
  • #documentary
/ flagship /cpp26-reflection 15/18

Auto-generated mocks from interfaces

Mockito and Moq in C++: point a library at an abstract base class and get a mock that records calls and lets you program return values. No per-method MOCK_METHOD boilerplate.

  • #reflection
  • #cpp26
  • #mocking
  • #testing
/ short

simdjson meets reflection: sb << my_struct at 6.8 GB/s

simdjson now ships a C++26 reflection backend: define SIMDJSON_STATIC_REFLECTION, and sb << my_struct serializes any aggregate at SIMD speed. The CITM Catalog benchmark hits 6.8 GB/s. Combined with P3394 annotations for rename/skip, this is the production JSON path the reflection series has been building toward.

  • #news
  • #cpp26
  • #p2996
  • #simdjson
/ flagship /cpp26-reflection 14/18

Autowired dependency injection: no container, just reflection

Spring's and .NET's DI containers, reimplemented as a 60-line C++26 library. Reflect constructor parameters, resolve them from a type registry, compose.

  • #reflection
  • #cpp26
  • #di
  • #dependency-injection
/ short

The hidden cost of <meta> -- and the three-line fix

Vittorio Romeo measured what C++26 reflection actually costs: the <meta> header adds ~181ms per TU on GCC 16.1, but the reflection algorithm itself is ~0.07ms per enumerator. The header is 2500x more expensive than the logic. A three-line CMake PCH stanza cuts the header cost by 2.3x. Modules, surprisingly, make it worse.

  • #news
  • #cpp26
  • #p2996
  • #meta
/ short

The May 2026 WG21 mailing in five papers (pre-Brno, 116 total)

WG21 dropped the pre-Brno mailing in early May -- 116 papers, the largest pre-meeting mailing since the C++20 design crunch. Five papers are doing the heavy lifting for C++29's safety story (the headline axis named in P5000R1 'Direction for ISO C++29'), plus the coroutines-for-I/O work that finally got first LEWG review on the schedule. This is the table of contents for what wro.cpp will be tracking through to Brno (8-13 June).

  • #news
  • #wg21
  • #cpp29
  • #profiles
/ flagship /cpp26-reflection 13/18

A tiny ORM: struct to SQL via reflection

Diesel / Entity Framework ergonomics in C++: annotate a struct, generate CREATE TABLE, SELECT, INSERT, UPDATE, and a row-to-struct binder. No codegen tool, no intrusive macros.

  • #reflection
  • #cpp26
  • #orm
  • #sql
/ short

C++ Safety State of the Union: May 2026

C++ in May 2026 has four conversations running at once: regulators (CISA, EU CRA) demanding memory-safety roadmaps; the committee fighting over how to respond (Hagenberg vote 19 profiles / 9 Safe C++ / 11 both); what actually shipped in C++26 (P2900 contracts, P3471 hardened stdlib, P2996 reflection); and what the industry actually deployed (Chrome MiraclePtr -57% UAF, Google's 0.3% perf-cost data, Apple libc++ safe-buffers). They don't talk to each other in public. This essay wires them. Pre-Brno (8-13 June) reading.

  • #news
  • #cpp26
  • #cpp29
  • #safety
/ short

Revzin at C++Now: 'Reflection Is Only Half the Story' -- what generation looks like next

Barry Revzin's C++Now 2026 keynote (Mon 4 May, Aspen) landed the line the C++ reflection community has been circling for two years: C++26 reflection lets you OBSERVE -- the next question is what it looks like to GENERATE. The 90-minute talk is a tour of source-code-generation design space (macros, templates, Rust proc-macros, Swift macros, D mixins) and reads as the natural sequel to wro.cpp's whole 'Where this is heading' triptych framing.

  • #news
  • #cpp26
  • #cpp29
  • #reflection
/ flagship /cpp26-reflection 12/18

Clap for C++: turning structs into command-line parsers

Rust's clap-derive in C++: declare a struct, get a working argv parser with --flags, -short options, help text, subcommands. One attribute per field, zero manual dispatch.

  • #reflection
  • #cpp26
  • #cli
  • #clap
/ short

What reinterpret_cast doesn't do: Fertig on std::start_lifetime_as and the C++23 escape hatch

Andreas Fertig's 2026-05-18 post (re-shared on isocpp.org) makes a pointed case: reinterpret_cast and std::start_lifetime_as look interchangeable -- but only if you don't read the abstract-machine fine print. reinterpret_cast is a POINTER operation; std::start_lifetime_as is an OBJECT-LIFETIME operation. The 5-line difference between UB-then-it-works-on-my-compiler and defined-behavior.

  • #news
  • #cpp23
  • #reinterpret-cast
  • #start-lifetime-as
/ short

Sutter's BeCPP keynote: C++ added more developers in 4 years than any other language

Herb Sutter's keynote at the BeCPP Symposium 2026 (March 30, Howest, Belgium) opened with a SlashData chart almost nobody outside the room has seen yet: C++ developer population grew 72% from Q1 2022 to Q1 2025 -- from 9.5M to 16.3M. That is the biggest absolute net gain of any general-purpose language over the period. Rust grew faster in percentage (137%) but on a smaller base (5.1M total). Here is the chart, the numbers behind it, and the thesis Sutter built on top -- plus an honest read on what 'fastest growing' means when JavaScript is still bigger than the second + third place combined.

  • #news
  • #cpp
  • #growth
  • #slashdata
/ flagship /cpp26-reflection 11/18

One codegen, many wire formats

JSON, YAML, XML, TOML, MessagePack — all from the same annotated struct. Factor format-specific syntax into a policy object, share the reflection walk, ship N formats for the cost of one.

  • #reflection
  • #cpp26
  • #yaml
  • #xml
/ short

The five most useful things C++26 reflection unlocks (in effort order)

C++26 reflection looks like it requires a PhD in template metaprogramming. It does not. Five concrete projects you can build with it, ranked from five minutes to weeks -- use this as a triage when picking your first reflection-powered project.

  • #cpp26
  • #p2996
  • #reflection
  • #opinion
/ flagship /cpp26-reflection 10/18

Deserialization and std::expected: completing the round-trip

Parse JSON into a typed C++ struct with precise per-field error reporting via std::expected. Reflection + template for + annotations — the same machinery, just running the other way.

  • #reflection
  • #cpp26
  • #json
  • #deserialization
/ flagship /cpp26-reflection 09/18

Annotations: tag-driven serialization comes to C++

P3394 brings serde-style and Jackson-style attribute programming to C++: rename, skip, skip_if_empty, rename_all — all as plain user-defined values queryable by reflection.

  • #reflection
  • #cpp26
  • #annotations
  • #p3394
/ short

Is std::vector consteval or constexpr? A reader's question, answered

A colleague asked: 'Is std::vector consteval and not constexpr?' Short answer: no, but the intuition is right. Long answer: the constexpr/consteval/constinit trio, the transient-allocation rule, and why std::define_static_array exists.

  • #cpp26
  • #constexpr
  • #consteval
  • #constinit
/ flagship /cpp26-reflection 08/18

A 40-line JSON serializer with reflection

Walking a struct and emitting JSON: the naive but complete version. About forty lines, no macros, no external codegen. The foundation of the reflect_json library.

  • #reflection
  • #cpp26
  • #json
  • #serialization
/ short

Reflection in the wild: April 2026 in five links

Five things happened to C++26 reflection in April 2026 -- GCC 16.1, Glaze v7.2, a Revzin write-up, a Lemire/Thiesen JSON talk, and one honest list of what is still not shipping.

  • #cpp26
  • #p2996
  • #news
  • #roundup
/ flagship /cpp26-reflection 07/18

Deriving equality, hashing, and ordering from structure

C++20 gave us `= default` for operator== and <=>. Reflection lets us do the same for hashing, plus go beyond default: include/exclude fields, custom combinators, floating-point tolerances — all declarative.

  • #reflection
  • #cpp26
  • #equality
  • #hash
/ flagship /cpp26-reflection 06/18

Auto-generating std::formatter<T> for any aggregate

Rust's #[derive(Debug)] in C++: make any struct printable via std::format and std::println by dropping in one partial specialisation of std::formatter. Nested types, containers, enum names — all handled.

  • #reflection
  • #cpp26
  • #formatter
  • #debug-print
/ short

Glaze v7.2 vs your hand-rolled JSON: a 30-line benchmark

Glaze v7.2 ships a P2996 backend that retires __PRETTY_FUNCTION__, lifts the 128-member cap, and serializes private members. Here is when you still write your own thirty lines -- and when one call wins.

  • #cpp26
  • #p2996
  • #glaze
  • #json
/ flagship /cpp26-reflection 05/18

Goodbye magic_enum: enum reflection done right

A reflection-driven enum↔string library in 30 lines. No __PRETTY_FUNCTION__ tricks, no compile-time range knob, no compiler-specific behaviour — and unbounded, including enum values beyond 128.

  • #reflection
  • #cpp26
  • #enum
  • #magic_enum
/ short

GCC 16.1 ships C++26 reflection -- your 30-line hands-on

GCC 16.1 dropped on 30 April 2026 with -freflection. C++26 was finalized at Croydon five weeks earlier. Here is a 25-line program you can compile and run today on your laptop.

  • #reflection
  • #cpp26
  • #gcc
  • #p2996
/ flagship /cpp26-reflection 04/18

template for: iterating reflections at compile time

Expansion statements (proposal P1306) unroll a loop at compile time, instantiating the body once per element. They are the natural partner of reflection — one loop, N specialisations.

  • #reflection
  • #cpp26
  • #expansion-statements
  • #p1306
/ short

C++26 is done -- five weeks since Croydon, here's what shipped

Five weeks ago WG21 voted C++26 to publication in Croydon. The dust has settled enough to take stock of what landed, what compiles today, and what it means for the wro.cpp reflection series.

  • #cpp26
  • #p2996
  • #reflection
  • #contracts
/ flagship /cpp26-reflection 03/18

Splicing: [: r :] and putting reflections back into code

Splicing is the inverse of ^^: it takes a std::meta::info and drops the referred entity back into your source. Types, expressions, template arguments, member accesses — all round-trippable.

  • #reflection
  • #cpp26
  • #splicer
  • #p2996
/ flagship /cpp26-reflection 02/18

Your first ^^: reflecting types and walking members

Hands-on introduction to C++26 reflection: the ^^ operator, std::meta::info, and walking struct members. We take the post-1 teaser apart and rebuild it from primitives.

  • #reflection
  • #cpp26
  • #fundamentals
  • #p2996
/ flagship /cpp26-reflection 01/18

C++26 Reflection: What changes, and why it matters

Part 1 of the C++26 reflection series. A 40-line JSON serializer nobody could write in C++ before 2026 — plus the strategic story of why static reflection changes the ecosystem.

  • #reflection
  • #cpp26
  • #motivation
  • #p2996