C++ Type and Value Category for Expression and Variable
<p>From this <a href="http://en.cppreference.com/w/cpp/language/type" rel="noreferrer">link</a>, it says that</p>

<blockquote>
  <p>Objects, references, functions including function template specializations, and expressions have a property called type</p>
</blockquote>

<p>So given the following:</p>

<pre><code>int &amp;&amp;rf_int = 10;
</code></pre>

<p>I can say that variable <code>rf_int</code> is of compound type <strong>rvalue reference to int</strong>.</p>

<p>But when talking about <a href="http://en.cppreference.com/w/cpp/language/value_category" rel="noreferrer">value category</a>, it specifically says that </p>

<blockquote>
  <p>Each expression has some <strong>non-reference</strong> type</p>
</blockquote>

<p>and </p>

<blockquote>
  <p>Each C++ expression (an operator with its operands, a literal, a <strong>variable</strong> name, etc.)</p>
</blockquote>

<p>Based on the above two statement, <code>rf_int</code> can be treated as an expression and expression has <strong>non-reference type</strong>.</p>

<p>Now I am really confused. Does <code>rf_int</code> have a <strong>reference</strong> type or not? Do we have to provide context when talking about the type of a name, be it a variable or an expression?</p>

<p>More specifically, when a variable name is used in function call:</p>

<pre><code>SomeFunc(rf_int);
</code></pre>

<p>Is <code>rf_int</code> now considered an expression (thus it is an lvalue with type int), or a variable (thus it is an lvalue with type rvalue reference to int)?</p>

<p><strong>EDIT</strong>: A comment <a href="https://stackoverflow.com/questions/20583531/lvalue-to-rvalue-reference-binding#comment-30793019">here</a> got me wonder about this issue.</p>