Defined in header <bit>
enum class endian
    little = /*implementation-defined*/,
    big    = /*implementation-defined*/,
    native = /*implementation-defined*/
(since C++20)

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
    little = __ORDER_LITTLE_ENDIAN__,
    big    = __ORDER_BIG_ENDIAN__,
    native = __BYTE_ORDER__


Feature-test macro


#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:


See also

reverses the bytes in the given integer value
(function template)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.