static constexpr uint32_t uint32_ = 0x01020304;
static constexpr uint8_t magic_ = (const uint8_t&)uint32_;
public:
static constexpr bool little = magic_ == 0x04;
static constexpr bool middle = magic_ == 0x02;
static constexpr bool big = magic_ == 0x01;
static_assert(little || middle || big, "Cannot determine endianness!");
private:
Endian() = delete;
};
Вот тут static constexpr uint8_t magic_ = (const uint8_t&)uint32_; гуглил, но так и не понял
reinterpret_cast запрещен в constexpr
https://en.cppreference.com/w/cpp/types/endian
Но кстати комплится
кажется, я понял, почему оно компилируется. если заменить (const uint8_t&) на *(const uint8_t*)&, то сломается. по-видимому, компилятор просто заменяет это на static_cast<uint8_t>(uint32_)
Оно же не скомпилируется даже.
Что такое uint8_t?
Обсуждают сегодня