RFC: [C++23] P1467R9 - Extended floating-point types and standard names

Making __bf16 only conditionally arithmetic, but having the condition being hardware support, seems much more reasonable as an intermediate step than having the condition being C++23. We would then have to make sure not to make std::bfloat16_t available in C++23 when hardware support was not available.

Longer-term, I think the right way to implement this without hardware support is to promote to float. I believe there’s generic backend code for that for float16 which shouldn’t be hard to extend to another type. Operation-by-operation promotion/truncation is expensive, of course. Excess precision arithmetic helps a lot with that, and we have code for that in Clang, again for float16, which was written to be easily applied to different types.