コンパイル時にエンディアンをチェックする方法をいくつか検索した後、次の解決策を思いつきました。
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
2 番目のケースでは、GCC は次のように述べてerror: accessing value of ‘a’ through a ‘char’ glvalue in a constant expression
います。そのようなことを禁止する規格は何も見つかりませんでした。多分誰かがGCCが正しい場合を明確にすることができますか?