Configuration Macros

The configuration macros below are defined automatically once any library header (for example <boost/int128.hpp>) is included; there is no separate configuration header to include directly.

User Configurable Macros

These macros allow customization of library behavior. User-configurable macros should be defined before including any library headers.

  • BOOST_INT128_ENABLE_CUDA: Defining this macro allows both types and selected functions to be run on both host and device when compiling with NVCC. Allowed functions have BOOST_INT128_HOST_DEVICE as part of their function signature in their documentation.

  • BOOST_INT128_NO_BUILTIN_INT128: The user may define this when they do not want the internal implementations to rely on builtin __int128 or unsigned __int128 types.

  • BOOST_INT128_DISABLE_EXCEPTIONS: Allows exceptions to be disabled. This macro will automatically be defined in the presence of -fno-exceptions or similar MSVC flags.

  • BOOST_INT128_BUILD_MODULE: Define this when building the library as a C++20 named module (consumed via import boost.int128). It switches the headers into module mode by exporting the public interface and suppressing the includes that the module unit itself provides. See Getting Started.

Automatic Configuration Macros

  • BOOST_INT128_HAS_INT128: This is defined when compiling on a platform that has builtin __int128 or unsigned __int128 types (e.g. __x86_64__).

  • BOOST_INT128_ENDIAN_LITTLE_BYTE: This is defined to 1 when compiling on a little endian architecture, otherwise 0.

  • BOOST_INT128_ENDIAN_BIG_BYTE: This is defined to 1 when compiling on a big endian architecture, otherwise 0.

  • BOOST_INT128_HAS_MSVC_INT128: This is defined when the MSVC standard library provides the simulated 128-bit integer types in <__msvc_int128.hpp> (MSVC in C++20 mode). When defined, the library uses those types as its native 128-bit backing.

  • BOOST_INT128_HAS_SPACESHIP_OPERATOR: This is defined when the compiler and standard library provide C++20 three-way comparison (operator<⇒ and <compare>). When defined, both types provide operator<⇒.

  • BOOST_INT128_HAS_FORMAT: This is defined by <boost/int128/format.hpp> when C++20 <format> is available. When defined, that header provides std::formatter specializations for both types.

  • BOOST_INT128_HAS_FMT_FORMAT: This is defined by <boost/int128/fmt_format.hpp> when the {fmt} library is available. When defined, that header provides fmt::formatter specializations for both types.

  • BOOST_INT128_HOST_DEVICE: This is defined to __host__ __device__ when compiling with NVCC (__NVCC__ is defined), and to nothing otherwise. The core type operations (constructors, conversion operators, and the comparison, bitwise, arithmetic, and shift operators) and most free functions are annotated with this macro, allowing int128_t and uint128_t to be used in CUDA device code. Host-only integrations that depend on host facilities are not annotated: std::hash, the iostream operators, the std::formatter / {fmt} support, and the core::string_view overloads of from_chars.