title: Different ways of overloading functions?
body: <p>Could someone confirm whether my understanding of what we can overload on is correct?</p>
  
  <ul>
  <li><p>const/non-const</p></li>
  <li><p>mutable/non-mutable</p></li>
  <li><p>parameter types (obviously)</p></li>
  <li><p>number of parameters (obviously)</p></li>
  <li><p>NOT return type</p></li>
  <li><p>EDIT: Whether the function (not parameter types) is volatile/non-volatile</p></li>
  </ul>
  
  <p>I am also a little confused whether int, int*, &amp; int and &amp;&amp; int can be used to overload a function with the same name? <strong>Would</strong></p>
  
  <pre><code>void X(int);
  void X(int*);
  void X(int&amp;);
  void X(int&amp;&amp;);
  </code></pre>
  
  <p><strong>be four different overloaded versions of the same function?</strong></p>