41 if (std::is_constant_evaluated()) {
42 if constexpr (
sizeof(
T) == 1u) {
44 }
else if constexpr (
sizeof(
T) == 2u) {
47 return static_cast<T
>((a << 8) | (b << 0));
48 }
else if constexpr (
sizeof(
T) == 4u) {
49 T a = (value >> 0) & T{0xff};
50 T b = (value >> 8) & T{0xff};
51 T c = (value >> 16) & T{0xff};
52 T d = (value >> 24) & T{0xff};
53 return (a << 24) | (b << 16) | (c << 8) | (d << 0);
55 static_assert(
sizeof(
T) == 8u);
56 T a = (value >> 0) & T{0xff};
57 T b = (value >> 8) & T{0xff};
58 T c = (value >> 16) & T{0xff};
59 T d = (value >> 24) & T{0xff};
60 T e = (value >> 32) & T{0xff};
61 T f = (value >> 40) & T{0xff};
62 T g = (value >> 48) & T{0xff};
63 T h = (value >> 56) & T{0xff};
64 return (a << 56) | (b << 48) | (c << 40) | (d << 32) |
65 (e << 24) | (f << 16) | (g << 8) | (h << 0);
70 if constexpr (
sizeof(
T) == 1u) {
73 }
else if constexpr (
sizeof(
T) ==
sizeof(
unsigned short)) {
74 using U =
unsigned short;
75 return _byteswap_ushort(U{value});
77 }
else if constexpr (
sizeof(
T) ==
sizeof(
unsigned long)) {
78 using U =
unsigned long;
79 return _byteswap_ulong(U{value});
81 static_assert(
sizeof(
T) == 8u);
82 return _byteswap_uint64(value);
85 if constexpr (
sizeof(
T) == 1u) {
87 }
else if constexpr (
sizeof(
T) == 2u) {
88 return __builtin_bswap16(uint16_t{value});
89 }
else if constexpr (
sizeof(
T) == 4u) {
90 return __builtin_bswap32(value);
92 static_assert(
sizeof(
T) == 8u);
93 return __builtin_bswap64(value);