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
 {
 #if defined(_MSC_VER) && !defined(__clang__)
     little = 0,
     big = 1,
     native = little
 #else
     little = __ORDER_LITTLE_ENDIAN__,
     big = __ORDER_BIG_ENDIAN__,
     native = __BYTE_ORDER__
 #endif
 };

Notes
   Feature-test macro Value Std Feature
   __cpp_lib_endian 201907L (C++20) std::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:
 mixed-endian

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