home | help
std::endian(3)		       C++ Standard Libary		  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 mat-
     ter and all
	    three values, std::endian::little,	std::endian::big,  and	std::en-
     dian::native are
	    the same.
	  *  If  the platform uses mixed endian, std::endian::native equals nei-
     ther
	    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)

http://cppreference.com 	   2024.06.10			  std::endian(3)

home | help