title: Why does explicitly calling operator<< on std::cout cause unexpected output?
body: <p>I was simply curious about what would happen if I called <code>operator&lt;&lt;</code> on <code>std::cout</code> explicitly because I learnt that <code>a.operator()</code> is exactly the same as <code>a()</code>. So I do it and it prints something weird:</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  using std::cout;
  
  int main()
  {
      cout.operator&lt;&lt;("Hello World");
  }
  </code></pre>
  
  <blockquote>
    <p><code>Output: 0x80486a0</code></p>
  </blockquote>
  
  <p>Oddly, it outputs an address (the address may be different for you but it should still be an address). I'm thinking this is the address of the string so I try dereferencing it to get it to output the string:</p>
  
  <pre><code>*( cout.operator&lt;&lt;("Hello World") );
  </code></pre>
  
  <p>But I get a very long error </p>
  
  <blockquote>
    <p><code>no match for operator* in '*std::cout.std::basic_ostream&lt;...</code></p>
  </blockquote>
  
  <p>I think this is pretty weird. Nothing of the <code>std::cout</code> definition would lead me to believe this would cause any different behavior; also given the fact that explicitly calling the operator function makes no difference (or <em>should</em> at least).</p>
  
  <p>So why am I getting this output? Why am I receiving an address instead of the string itself when calling the operator explicitly? Is this even the address in memory or just garbage output? Any responses are appreciated.</p>