title: How does std::endl not use any brackets if it is a function?
body: <p>The question is pretty much in the title. According to <a href="http://www.cplusplus.com/reference/iostream/manipulators/endl/">C++ Reference</a>, <code>std::endl</code> is actually a function. Looking at its declaration in <code>&lt;iostream&gt;</code>, this can be verified.</p>
  
  <p>However, when you use <code>std::endl</code>, you don't use <code>std::endl()</code>. Instead, you use:</p>
  
  <pre><code>std::cout &lt;&lt; "Foo" &lt;&lt; std::endl;
  </code></pre>
  
  <p>In fact, if you use <code>std::endl()</code>, the compiler demands more parameters, as noted on the link above.</p>
  
  <p>Would someone care to explain this? What is so special about <code>std::endl</code>? Can we implement functions that do not require any brackets when calling too?</p>