title: Function call missing argument list warning
body: <p>I'm reading over "The C++ Programming Language - Fourth Edition" and I was typing up a simple exercise just to get a hang of C++ syntax and I accidentally stumbled across something that made me raise an eyebrow.  In short, I forgot to add <code>()</code> on <code>accept</code> in main:</p>
  
  <pre><code>bool accept()
  {
      cout &lt;&lt; "Do you want to proceed (y or n)?\n";
  
      char answer = 0;
      cin &gt;&gt; answer;
  
      if (answer == 'y')
      {
          return true;
      }
      return false;
  
  }
  
  int main()
  {
      accept;
  }
  </code></pre>
  
  <p>This runs and compiles and produces (in VS2015) a</p>
  
  <blockquote>
    <p>C4551 - function call missing argument list</p>
  </blockquote>
  
  <p>I've found myself reading <a href="http://www.cprogramming.com/c++11/c++11-lambda-closures.html">lambdas</a> and a bunch of questions on SO that should be be closed because they are mostly asking to "debug my code."  </p>
  
  <p>I figured that if the code compiles and runs, and the function contains a blocking statement (waiting for user input) and a return type, that all the code would get executed as expected regardless of missing the parentheses; that is not the case though.</p>
  
  <p>Additionally, I figured I would change the call to <code>accept</code> in main, to <code>bool a = accept; cout &lt;&lt; a;</code> to try and prevent any optimization (if that was what was actually happening), and that did not call the <code>accept()</code> code either. </p>
  
  <p>What I'm curious to know is:</p>
  
  <ol>
  <li>What is the call to <code>accept</code> getting compiled into?</li>
  <li>Why isn't the code in <code>accept</code> getting called </li>
  <li>Why is this only a warning, and not an error (I know I can change configuration to display it as error, I'm more so questioning how this is accepted syntax by default when actual result differs from expected result so "dramatically?"  This question might be opinion-based, omit it if you agree it is.)</li>
  <li>Running the <code>bool a = accept; cout &lt;&lt; a;</code> code in main produces <code>1</code> as the output.  How can this be when <code>false</code> is the default bool value (in C# at least) and there is nothing to return a true value since the accept code does not get executed?</li>
  </ol>