title: Is there a reason I've never seen std::as_const as a way of differentiating between mutable and non-mutable parameters?
body: <p>One of the nicer features of Rust is explicitly showing whether parameters are mutable, non-mutable, or moved from the caller's site:</p>
  <pre class="lang-rust prettyprint-override"><code>foobar(&amp;mut foo, &amp;bar,         baz);
  //     ^ mutable ^ non-mutable ^ moved (copied if trivial)
  </code></pre>
  <p>In C++ we already have tools to do this:</p>
  <pre class="lang-cpp prettyprint-override"><code>foobar(std::ref(foo), std::as_const(bar), std::move(baz));
  </code></pre>
  <p>Yet, though <code>std::move</code> is standard practice, I've never seen <code>std::as_const</code> being used in a function call.</p>
  <p>Is there a reason for this, other than maybe <code>std::as_const</code> is too verbose? Would adding simpler syntactic sugar for it provide a good new feature that makes C++ more readable?</p>