Literals
The following literals and macros are provided for convenient construction of the types provided in the library:
#include <boost/int128/literals.hpp>
namespace boost {
namespace int128 {
namespace literals {
constexpr uint128_t operator ""_u128(const char* str) noexcept;
constexpr uint128_t operator ""_U128(const char* str) noexcept;
constexpr uint128_t operator ""_u128(const char* str, std::size_t len) noexcept;
constexpr uint128_t operator ""_U128(const char* str, std::size_t len) noexcept;
constexpr uint128_t operator ""_u128(unsigned long long v) noexcept;
constexpr uint128_t operator ""_U128(unsigned long long v) noexcept;
constexpr int128_t operator ""_i128(const char* str) noexcept;
constexpr int128_t operator ""_I128(const char* str) noexcept;
constexpr int128_t operator ""_i128(unsigned long long v) noexcept;
constexpr int128_t operator ""_I128(unsigned long long v) noexcept;
constexpr int128_t operator ""_i128(const char* str, std::size_t len) noexcept;
constexpr int128_t operator ""_I128(const char* str, std::size_t len) noexcept;
} // namespace literals
} // namespace int128
} // namespace boost
#define BOOST_INT128_UINT128_C(x) ...
#define BOOST_INT128_INT128_C(x) ...
The macros at the end allow you to write out a 128-bit number like you would with say UINT64_C without having to add quotes:
#include <boost/int128.hpp>
int main()
{
const boost::int128::uint128_t max_val {std::numeric_limits<boost::int128::uint128_t>::max()};
// The following type for auto will be boost::int128::uint128_t
const auto macro_val{BOOST_INT128_UINT128_C(340282366920938463463374607431768211455)};
return !(max_val == macro_val);
}