Я задал много вопросов в SO по этой теме, но пока не нашел никакого решения. Одно естественное решение было упомянуто здесь: Определение достоверности во время компиляции.
Тем не менее, связанные проблемы, упомянутые в комментариях и тот же ответ.
С некоторыми изменениями я могу скомпилировать аналогичное решение с g++ и clang++ (-std=c++11
) без предупреждения.
static_assert(sizeof(char) == 1, "sizeof(char) != 1");
union U1
{
int i;
char c[sizeof(int)];
};
union U2
{
char c[sizeof(int)];
int i;
};
constexpr U1 u1 = {1};
constexpr U2 u2 = {{1}};
constexpr bool IsLittleEndian ()
{
return u1.i == u2.c[0]; // ignore different type comparison
}
static_assert(IsLittleEndian(), "The machine is BIG endian");
Демо.
Можно ли считать это детерминированным методом для решения вопроса о контенте или же он пропустит пин-код или что-то еще?