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::ranges refinements and updated std::optional interactions 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.