troca de endianness de carros alegóricos e duplos

Gostaria de mudar o "endianness" de valores flutuantes e duplos, funciona bem, fazendo algo como:

float const v{1.f};

swap(reinterpret_cast<::std::uint32_t const&>(v));

Existe uma maneira melhor de fazer a troca, sem elenco?

EDITAR:swap() é um invólucro em C ++ para as funções internas do gcc, não o incluí aqui.

uint16_t __builtin_bswap16 (uint16_t x)
uint32_t __builtin_bswap32 (uint32_t x)
uint64_t __builtin_bswap64 (uint64_t x)

A troca de endianess é necessária para alguns formatos de dados, como o CBOR.

questionAnswers(1)

yourAnswerToTheQuestion