En su reciente charla "Punking de tipo en C ++ moderno", Timur Doumler dijo que std::bit_castno se puede usar para convertir un bit floaten un unsigned char[4]porque las matrices de estilo C no se pueden devolver de una función. Deberíamos usar std::memcpyo esperar hasta C ++ 23 (o posterior) cuando algo así reinterpret_cast<unsigned char*>(&f)[i]esté bien definido.
En C ++ 20, ¿podemos usar un std::arraycon std::bit_cast,
float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);
en lugar de una matriz de estilo C para obtener bytes de a float?
struct X { unsigned char elems[5]; };satisface la regla que está citando. Ciertamente se puede inicializar en una lista con hasta 4 elementos. Puede también ser inicializado lista con los 5 elementos. No creo que ningún implementador de biblioteca estándar odie a las personas lo suficiente como para hacer esto, pero creo que es técnicamente conforme.