title: Why can an rvalue not bind to a non-const lvalue reference, other than the fact that writing to a temporary has no effect?
body: <p>I have read <a href="https://stackoverflow.com/questions/1565600/how-come-a-non-const-reference-cannot-bind-to-a-temporary-object">the SO question here</a> and understood this part of the answer: "But if you bind a temporary to a non-const reference, you can keep passing it around "forever" just to have your manipulation of the object disappear, because somewhere along the way you completely forgot this was a temporary."</p>
  
  <p>That is, in the following:</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  void modifyValue(int&amp; rValue) {
      rValue++;
  }
  
  int main() {
      modifyValue(9899);
  
      return 0;
  }
  </code></pre>
  
  <p>If an rvalue could bind to a non-const lvalue reference, then potentially many modifications could be done that would eventually be discarded (since an rvalue is temporary), this being useless.</p>
  
  <p>This seems to be well defined however (writing to a temporary value is just like writing to any value, the lifetime has no relevancy to the validity of the writing). </p>
  
  <p>That is a perfectly alright reason to prohibit the specified binding (even though the binding would be well defined), however once I considered that such a binding being prohibited forces the need for forwarding references, my question started forming.</p>
  
  <p><strong>Are there any other reasons (that is, apart from writing to a temporary value) as to why an rvalue cannot bind to a non-const lvalue reference?</strong></p>