Avoid technically UB type punning when determining endianness

This commit is contained in:
Martin Hořeňovský 2019-10-27 22:07:10 +01:00
parent 2fbd66c51c
commit 7ada02e21e
No known key found for this signature in database
GPG Key ID: DE48307B8B0D381A

View File

@ -38,13 +38,11 @@ namespace Detail {
enum Arch { Big, Little };
static Arch which() {
union _{
int asInt;
char asChar[sizeof (int)];
} u;
u.asInt = 1;
return ( u.asChar[sizeof(int)-1] == 1 ) ? Big : Little;
int one = 1;
// If the lowest byte we read is non-zero, we can assume
// that little endian format is used.
auto value = *reinterpret_cast<char*>(&one);
return value ? Little : Big;
}
};
}