std::endian(3)

NAME
std::endian - std::endian

Synopsis
   Defined in header <bit>
   enum class endian
   {
   little = /*implementation-defined*/, (since C++20)
   big = /*implementation-defined*/,
   native = /*implementation-defined*/
   };
   Indicates the endianness of all scalar types:
     * If all scalar types are little-endian, std::endian::native equals
       std::endian::little
     * If all scalar types are big-endian, std::endian::native equals std::endian::big
   Corner case platforms are also supported:
     * If all scalar types have sizeof equal to 1, endianness does not matter and all
       three values, std::endian::little, std::endian::big, and std::endian::native are
       the same.
     * If the platform uses mixed endian, std::endian::native equals neither
       std::endian::big nor std::endian::little.

Possible implementation
 enum class endian
 {
 #ifdef _WIN32
     little = 0,
     big = 1,
     native = little
 #else
     little = __ORDER_LITTLE_ENDIAN__,
     big = __ORDER_BIG_ENDIAN__,
     native = __BYTE_ORDER__
 #endif
 };

Notes
   Feature-test macro: __cpp_lib_endian

Example
// Run this code
 #include <bit>
 #include <iostream>
 int main() {
     if constexpr (std::endian::native == std::endian::big)
         std::cout << "big-endian\n";
     else if constexpr (std::endian::native == std::endian::little)
         std::cout << "little-endian\n";
     else std::cout << "mixed-endian\n";
 }

Possible output:
 little-endian

See also
   byteswap reverses the bytes in the given integer value
   (C++23) (function template)