Why doesn't uint128_t have bit shift overloads for uint128_t?
<p><a href="http://www.boost.org/doc/libs/1_62_0/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html" rel="nofollow noreferrer"><code>boost::multiprecision::uint128_t</code></a> doesn't seem to have an overload for the left/right shift operator when both operands are <code>uint128_t</code>s:</p>

<pre><code>uint128_t operator&lt;&lt;(uint128_t, uint128_t); // Missing
uint128_t operator&gt;&gt;(uint128_t, uint128_t); // Also Missing
</code></pre>

<p>Some sample code:</p>

<pre><code>#include &lt;boost/multiprecision/cpp_int.hpp&gt;

int main() {
    using uint128_t = boost::multiprecision::uint128_t;
    uint128_t number = 100;
    uint128_t ten = 10;

    auto leftShift = number &lt;&lt; ten;  // fail
    auto rightShift = number &gt;&gt; ten; // fail
    return 0;
}
</code></pre>

<p><a href="https://ideone.com/wP6ax3" rel="nofollow noreferrer">Here is a demo</a>.</p>

<p>The error message is pretty long, so here is the (modified) first message for the left shift operator:</p>

<pre><code>prog.cpp:8:26: error: no match for 'operator&lt;&lt;' (operand types 
                      are 'uint128_t {aka boost_template_typedef_for_uint128_t}' 
                      and 'uint128_t {aka boost_template_typedef_for_uint128_t}')
  auto leftShift = number &lt;&lt; ten;  // fail
</code></pre>

<p><sup>You can look at the demo for the full error messages.</sup></p>

<p>Why is that the case? I don't see a reason why they wouldn't be implemented, as <code>unsigned a = 100u &lt;&lt; 2u;</code> works perfectly fine for the same types.</p>