C++23 for Bitcoin Core is mostly a "style update" on top of C++20. However, the workarounds to avoid C++23 keep accumulating and some parts of the code already use C++23 features, such as lambda attributes (https://github.com/bitcoin-core/libmultiprocess/commit/bdd0cd69418d189f62699d274a751cbf6d36bb43).
I don't know when it is fine to switch, but at some point, I think it is fine to require a C++23 compiler, so that new stuff is unlocked. Of course this requires bumping the minimum required compiler versions:
- GCC: 13
- Clang: 19
There are some C++23 features that aren't implemented (such as <stacktrace> not really shipped in any vanilla stdlib today), or e.g. ranges::starts_with not implemented until libstdc++-16. But overall I think we are better off using C++23 without those few carve-outs instead of waiting longer?