title: call to constructor can be considered as function declaration?
body: <p>The next few lines I'm going to write come from the book "The C++ Standard Library - A tutorial and reference".</p>
  
  <blockquote>
    <p>Initialize by using standard input:</p>
  </blockquote>
  
  <pre><code>//read all integer elements of the deque from standard input
  std::deque&lt;int&gt; c((std::istream_iterator&lt;int&gt;(std::cin)),
  (std::istream_iterator&lt;int&gt;()));
  </code></pre>
  
  <blockquote>
    <p>Don't forget the extra parentheses around the initializer arguments
    here. Otherwise, this expression does something very different and you
    probably will get some strange warnings or errors in following
    statements. Consider writing the statement without extra parentheses:</p>
  </blockquote>
  
  <pre><code>std::deque&lt;int&gt; c(std::istream_iterator&lt;int&gt;(std::cin),
  std::istream_iterator&lt;int&gt;());
  </code></pre>
  
  <blockquote>
    <p>In this case, c declares a function with a return type that is
    deque. Its first parameter is of type istream_iterator with
    the name cin, and its second unnamed parameter is of type "function
    taking no arguments returning istream_iterator." This construct
    is valid syntactically as either a declaration or an expression. So,
    according to language rules, it is treated as a declaration. The extra
    parentheses force the initializer not to match the syntax of a
    declaration.</p>
  </blockquote>
  
  <p>I can see why the one with extra parentheses is not considered a function declaration, but
  I can't see what would make the one without into a function declaration though? For it has parentheses around <code>(std::cin)</code>, and as far as I know variables may not have names with parentheses?</p>
  
  <p>Am I missing something?</p>