title: How to express constness of a forwarding reference?
body: <p>Please consider the following template function interface with a forwarding reference argument:</p>
  
  <pre><code>template&lt;typename T&gt;
  void f(T&amp;&amp; t) { ... }
  </code></pre>
  
  <p>In this case, <code>f</code> either takes an lvalue reference, or an rvalue reference, depending on the type of the argument for <code>f</code>. How can I express that <code>f</code> does not modify its parameter? The following naive approach does not work, since it no longer allows passing lvalue references to <code>f</code>:</p>
  
  <pre><code>template&lt;typename T&gt;
  void f(const T&amp;&amp; t) { ... }
  </code></pre>