title: What special rules apply to unary & operator?
body: <p>Are there any special rules that apply to the unary &amp; operator?</p>
  
  <p>For example, the code:</p>
  
  <pre><code>#include &lt;iostream&gt;
  struct X
  {
      X() {}
      void* operator &amp;() { return NULL; }
  };
  int main()
  {
      const X x;
      std::cout &lt;&lt; &amp;x &lt;&lt; std::endl;
      X y;
      std::cout &lt;&lt; &amp;y;
  }
  </code></pre>
  
  <p>produces the output </p>
  
  <pre><code>0xbfbccb33
  0
  </code></pre>
  
  <p>I knew this would compile and run like this because of a discussion I've had here before, but hadn't I known this, I would have expected this to fail to compile, because <code>operator &amp;</code> is not declared <code>const</code>.</p>
  
  <p>So it appears that the compiler generates <code>operator &amp;() const</code> regardless of whether <code>operator &amp;()</code> is overloaded or not. Fine, this makes sense, especially with the sample and output.</p>
  
  <p>The question is <strong>where is this behavior detailed in the standard?</strong></p>
  
  <p>I'm not looking for answers that re-iterate what I already stated in the question, so please don't explain how my overloaded operator can't be called on a <code>const</code> object, because I already know that.</p>