|
Aria 2.0.0
C++23 MVVM framework (C++20 minimum) — reactive, coroutine-first, ABI-layered
|
Assessment date: 2026-09-13.
C++23 mode is supported; C++20 remains the default and minimum. Full C++23 framework tests have passed locally on macOS and in Ubuntu Clang CI. Adopt individual newer facilities only when they solve a demonstrated problem across the supported toolchains. Changing the language flag alone does not repair ownership, cancellation, collection diffs, or reentrancy, and does not establish a performance improvement.
| Facility | Potential use | Decision |
|---|---|---|
| std::expected<T, Error> | Explicit success/failure for new synchronous APIs | Useful when such an API is needed. Existing Loadable<T> also represents idle, loading, refreshing, and stale data; it cannot be replaced by a two-state result. |
| std::move_only_function | Owning callbacks with move-only captures | Useful, but unavailable in the tested Apple and Android standard libraries. It also does not provide the fixed-capacity, no-heap contract of inplace_function. |
| std::generator | Standardize the synchronous generator | Cannot currently replace Aria's generator on all target toolchains. It does not replace asynchronous Task, executors, or cancellation. |
| Explicit object parameters (deducing this) | Reduce some const/ref overload duplication | A modest maintenance benefit; it would raise the compiler floor for public headers. |
| std::to_underlying, optional monadic operations, range helpers | Shorter implementation code | Small local improvements; insufficient reason to raise every consumer's minimum standard. |
Aria's function_ref has a separate non-owning contract. Its standard-library counterpart is a C++26 facility, so C++23 alone does not remove that component.
Each cell below was tested with a small translation unit that actually uses the facility and links an executable. These are feature probes, not a claim that every Aria test has run on every operating-system version.
| Toolchain / target | expected and transform | to_underlying | Explicit object parameters | move_only_function | generator |
|---|---|---|---|---|---|
| Apple Clang 21 / macOS arm64 | Pass | Pass | Pass | Unavailable | Unavailable |
| Apple Clang 21 / iOS simulator arm64, minimum iOS 15 | Pass | Pass | Pass | Unavailable | Unavailable |
| Android NDK r29, Clang 21 / arm64, API 21 | Pass | Pass | Pass | Unavailable | Unavailable |
| Android NDK r25b, Clang 14 / arm64, API 21 | Unavailable | Unavailable | Unavailable | Unavailable | Unavailable |
The newer toolchains used -std=c++23; r25b used its accepted spelling -std=c++2b. Failure is the absence of the tested facility, not a claim that the compiler rejects every C++23 program.
Apple distinguishes compiler support from facilities requiring the deployed OS's libc++.dylib; each adopted feature needs a deployment-target check. For example, its support table requires Xcode 16.3 for explicit object parameters. Apple C++ support
NDK r29 updates the LLVM toolchain to clang-r563880c. Its exact standard-library feature set must still be probed; the release number is not a promise of full C++23 conformance. NDK r29 changelog
GCC's library provides expected and move_only_function from GCC 12.1, and expected monadic operations from 13.1. Aria's GCC 13 CI therefore has these facilities, but this does not establish availability in Clang's selected library: Linux Clang can use either libstdc++ or libc++. libstdc++ feature status
MSVC documents support per compiler and library feature, rather than treating the standard as an indivisible capability. A Windows C++23 build must pin a toolset and its supported /std mode, then run the framework and adapter tests. MSVC conformance table
LLVM's current status table still lists gaps, including std::generator. The Apple/NDK probe results above are therefore decisive for the facilities Aria could otherwise replace. libc++ C++23 status
No C++23-only public API or baseline migration is part of this assessment.