C++26: more constexpr in the core language
Published on: 2025-08-12 20:13:03
Since constexpr was added to the language in C++11, its scope has been gradually expanded. In the beginning, we couldn’t even use if , else or loops, which were changed in C++14. C++17 added support for constexpr lambdas. C++20 added the ability to use allocation and use std::vector and std::string in constant expressions. In this article, let’s see how constexpr evolves with C++26. To be more punctual, let’s see what language features become more constexpr -friendly. We’ll discuss library changes in a separate article, as well as constexpr exceptions, which need both language and library changes.
P2738R1: constexpr cast from void*
Thanks to the acceptance of P2738R1, starting from C++26, one can cast from void* to a pointer of type T in constant expressions, if the type of the object at that adress is exactly the type of T .
Note that conversions to interconvertible - including pointers to base classes - or not related types are not permitted.
The motivation behind this change is
... Read full article.