title: Difference between std::greater<int>() and std::greater<int>?
body: <p>This code works:</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;queue&gt;
  #include &lt;vector&gt;
  #include &lt;functional&gt;
  using namespace std;
  int main(){
      priority_queue&lt;int,vector&lt;int&gt;,greater&lt;int&gt; &gt; pq;
      pq.push(1);
      cout&lt;&lt;pq.top()&lt;&lt;endl;
  }
  </code></pre>
  
  <p>But,this code does not compile:</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;queue&gt;
  #include &lt;vector&gt;
  #include &lt;functional&gt;
  using namespace std;
  int main(){
      priority_queue&lt;int,vector&lt;int&gt;,greater&lt;int&gt;() &gt; pq;
      pq.push(1);
      cout&lt;&lt;pq.top()&lt;&lt;endl;
  }
  </code></pre>
  
  <p>Why?<br>
  All I understand is that <code>greater&lt;int&gt;()</code>  is a function object and <code>priority_queue</code> accepts a binary predicate as third argument and that predicates are a special type of functors.
  But how does the pair of braces make that difference.</p>