Why is "auto const&" not read-only? : <pre><code>#include &lt;tuple&gt;

int main()
{
    int xa = 1;
    int ya = 2;

    auto const&amp; [xb, yb] = std::tuple&lt;int&amp;, int&amp;&gt;(xa, ya);

    xb = 9; // Shouldn't this be read-only?

    return xa + ya;
}
</code></pre>

<p>This not only compiles, but returns 11.  </p>

<p>So two questions:</p>

<ol>
<li><p>Why am I allowed to write to xb when it is specified as auto const&amp;?  Shouldn't this fail to compile?</p></li>
<li><p>Why can't I replace "auto const&amp;" with "auto&amp;" and have it compile?  Both Clang (6.0) and g++ (7.3) complain with an error message like "non-const lvalue reference of type&lt;...> cannot bind to temporary of type tuple&lt;...>"</p></li>
</ol>

<p>Thanks!</p>
