Проверка порядка следования байтов во время компиляции: правильна ли эта функция constexpr в соответствии со стандартом?

После некоторых поисков способа проверки порядка байтов во время компиляции я пришел к следующему решению:

static const int a{1};

constexpr bool is_big_endian()
{
    return *((char*)&(a)) == 1;
}

GCC принимает этот код только в некоторых контекстах, где требуется constexpr:

int b[is_big_endian() ? 12 : 25]; //works
std::array<int, testendian() ? 12 : 25> c;  //fails

Для во втором случае GCC сообщает об ошибке : доступ к значению 'a' через glvalue 'char' в константном выражении . Я не нашел в стандарте ничего, что запрещало бы такое. Может быть, кто-нибудь сможет уточнить, в каком случае GCC правильный?

13
задан p12 5 February 2012 в 20:10
поделиться