I would change this: static constexpr uint8_t endianValues[4] = {0, 1, 2, 3}; To this: static const uint32_t value = HL_LITTLE_ENDIAN; // 0x03020100 static const uint8_t* endianValues = (uint8_t*)&value; **Alternatively**, you can change the `getEndianOrder` function to read the `endianValues` array as a `uint32`, but you will have to add a preprocessor directive (`#pragma`) to make sure that it is placed in a memory address aligned to 4 bytes (and that by itself might yield some platform-dependency issues, which is pretty much in contrast with your goal here to begin with): constexpr hl_endianness getEndianOrder() { switch (*(uint32_t*)endianValues)) { case HL_LITTLE_ENDIAN: return HL_LITTLE_ENDIAN; case HL_BIG_ENDIAN: return HL_BIG_ENDIAN; case HL_PDP_ENDIAN: return HL_PDP_ENDIAN; } return HL_UNKNOWN_ENDIAN; }