C++26: A User-Friendly assert() macro -- Sandor Dargo
C++26 is bringing some long-overdue changes to
assert(). But why are those changes needed? And when do we actually use assert, anyway?
At its core, assert() exists to validate runtime conditions. If the given expression evaluates to false, the program aborts. I’m almost certain you’ve used it before — at work, in personal projects, or at the very least in examples and code snippets.
So what’s the problem?
C++26: A User-Friendly assert() macro
by Sandor Dargo
From the article:
assert()is a macro — and a slightly sneaky one at that. Its name is written in lowercase, so it doesn’t follow the usual SCREAMING_SNAKE_CASE convention we associate with macros. There’s a good chance you’ve been using it for years without ever thinking about its macro nature.Macros, of course, aren’t particularly popular among modern C++ developers. But the issue here isn’t the usual - but valid - “macros are evil” argument. The real problem is more specific:
The preprocessor only understands parentheses for grouping. It does not understand other C++ syntax such as template angle brackets or brace-initialization.
As a result, several otherwise perfectly valid-looking assertions fail to compile:
// https://godbolt.org/z/9sqM7PvWh using Int = int; int x = 1, y = 2; assert(std::is_same<int, Int>::value); assert([x, y]() { return x < y; }() == 1); assert(std::vector<int>{1, 2, 3}.size() == 3);


Registration is now open for CppCon 2026! The conference starts on September 12 and will be held 
Registration is now open for CppCon 2026! The conference starts on September 12 and will be held 
