title: How to make template rvalue reference parameter ONLY bind to rvalue reference?
body: <p>I'm writing a network library and use move semantics heavily to handle ownership for file descriptors. One of my class wishes to receive file descriptor wrappers of other kinds and take ownership, so it's something like</p>
  
  <pre><code>struct OwnershipReceiver
  {
    template &lt;typename T&gt;
    void receive_ownership(T&amp;&amp; t)
    {
       // taking file descriptor of t, and clear t
    }
  };
  </code></pre>
  
  <p>It has to deal multiple unrelated types so receive_ownership has to be a template, and to be safe, I wish it ONLY binds to rvalue references, so that user has to explicitly state std::move when passing an lvalue.</p>
  
  <p><code>receive_ownership(std::move(some_lvalue));</code></p>
  
  <p>But the problem is: C++ template deduction allows an lvalue to be passed in without extra effort. And I actually shot myself on the foot once by accidentally passing an lvalue to receive_ownership and use that lvalue(cleared) later.</p>
  
  <p>So here is the question: how to make a template ONLY bind to rvalue reference?</p>