title: Misunderstanding about ostream class and operator <<
body: <p>After looking at the <code>ostream::operator &lt;&lt;</code> c++ reference,</p>
  
  <p>I noticed the following declarations:</p>
  
  <pre><code>ostream&amp; operator&lt;&lt; (bool val);
  ostream&amp; operator&lt;&lt; (short val);
  ostream&amp; operator&lt;&lt; (unsigned short val);
  ostream&amp; operator&lt;&lt; (int val);
  ostream&amp; operator&lt;&lt; (unsigned int val);
  ostream&amp; operator&lt;&lt; (long val);
  ostream&amp; operator&lt;&lt; (unsigned long val);
  ostream&amp; operator&lt;&lt; (float val);
  ostream&amp; operator&lt;&lt; (double val);
  ostream&amp; operator&lt;&lt; (long double val);
  ostream&amp; operator&lt;&lt; (void* val);
  ostream&amp; operator&lt;&lt; (streambuf* sb );
  ostream&amp; operator&lt;&lt; (ostream&amp; (*pf)(ostream&amp;));
  ostream&amp; operator&lt;&lt; (ios&amp; (*pf)(ios&amp;));
  ostream&amp; operator&lt;&lt; (ios_base&amp; (*pf)(ios_base&amp;));
  </code></pre>
  
  <p>But then I found out that there are also the following declarations:</p>
  
  <pre><code>ostream&amp; operator&lt;&lt; (ostream&amp; os, char c);
  ostream&amp; operator&lt;&lt; (ostream&amp; os, signed char c);
  ostream&amp; operator&lt;&lt; (ostream&amp; os, unsigned char c);
  ostream&amp; operator&lt;&lt; (ostream&amp; os, const char* s);
  ostream&amp; operator&lt;&lt; (ostream&amp; os, const signed char* s);
  ostream&amp; operator&lt;&lt; (ostream&amp; os, const unsigned char* s);
  </code></pre>
  
  <p>Why are the char/string output operators not member functions?</p>