Matt Borland wrote:
How does this relate to / interact with __(u)int128_t?
If __(u)int128_t exists, then all operators between those types and the boost.int128 types are defined: construction, conversion, add, sub, mul, div, etc. Same case if you have MSVC's std::_Unsigned128 or std::_Signed128 as the "builtin" 128-bit type. The alignment of the boost.int128 types is also set to match the builtin types when they exist. Internally, the boost.int128 types are a struct of two 64-bit integers regardless of the platform.
What do the operations actually do, though? Does adding boost::uint128, when __uint128_t exists, use __uint128_t addition, or does it continue to use the library implementation? Similarly, for mixed mode; what does adding boost::uint128 and __uint128_t do under the hood? (And what is the return type? I assume boost::uint128?)