Портативный/стандартный способ определения endianness во время компиляции

Не помещайте это как дубликат. предлагаемый дублирующий пост фактически говорил о принятии RUNTIME. И, самое главное, ни один из ответов не отвечает на мой вопрос.

Мне нужно прочитать a uint16_t из двух байтов в C/С++. Итак, мне нужно решить, в каком формате находится финальный формат платформы, с которой компилируется мой код. Я использую макросы в расширение GNU C.

// 'size' is 'uint16_t' and read from big-endian format. 
// So if the platform is little-endian, I need to flip the btyes.
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__    
     size = ( size << 8 ) | ( size >> 8 );
#endif

Производительность имеет решающее значение в моем случае использования, поэтому ntohs или htons для меня не вариант. Мне нужно проверить этот endian во время предварительной обработки.

Вопрос. Существует ли стандартный способ (языковой стандарт) для этой предварительной обработки?