As ULTRA continues to grow, we want to ensure that the code base remains modern, concise and maintainable. With that in mind, we're beginning a gradual transition to C++23 across the project.
This means that ULTRA v0.9.0 will be the last version fully compatible with C++20. All new development on the main branch will require a C++23-compliant toolchain.
Why move to C++23?
The goal is not to use new features for their own sake, but to support a cleaner, safer and more expressive code base. C++23 introduces several improvements that directly benefit ULTRA's design philosophy:
- a more modern and simplified standard library. Features such as
std::expected,std::rangesrefinements and updatedstd::optionalinteractions reduce boilerplate and improve error handling; - better ergonomics for generic code. ULTRA leans heavily on templates and type-driven design. C++23 offers clearer constraints, improved concepts, and more predictable behaviour in edge cases, key advantages for a library with metafunctions, traits and compile-time inference mechanisms;
- fewer workarounds. Some areas of ULTRA currently require extra indirection to maintain C++20 compatibility. C++23 removes the need for several of these patterns, making the code both shorter and easier to reason about;
- expand features without relying on vendor-specific extensions.
Our aim is long-term maintainability rather than short-term novelty. C++23 simply gives us the right tools to get there.