https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94566
--- Comment #8 from Oliver Schönrock <oschonrock at gmail dot com> --- how about: #include <bit> #include <compare> #include <cstdint> int conv3(std::strong_ordering s){ return std::bit_cast<std::int8_t>(s); } std::strong_ordering conv4(int i){ return std::bit_cast<std::strong_ordering>(static_cast<std::int8_t>(i)); } conv3(std::strong_ordering): movsbl %dil, %eax ret conv4(int): movl %edi, %eax ret https://godbolt.org/z/szP5MGq4T