title: Calling constructor with braces instead parantheses
body: <p>I recently realized that in C++11 we can call a delegating initializer-list constructor like </p>
  
  <pre><code>Foo() : Foo{42} // delegate to Foo(initializer_list&lt;&gt;)
  </code></pre>
  
  <p>Is this syntax correct? It seems to be, although I would have expected to always use parentheses when calling a function, like <code>Foo({42})</code>. The example code below <a href="http://ideone.com/xBPCPV" rel="nofollow">compiles fine</a> in both clang++ and g++</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;initializer_list&gt;
  
  struct Foo
  {
      Foo() : Foo{42} // I would have expected invalid syntax, use Foo({42})
      {
          std::cout &lt;&lt; "Foo()... delegating constructor\n";
      }
      Foo(std::initializer_list&lt;int&gt;)
      {
          std::cout &lt;&lt; "Foo(initializer_list)\n";
      }
  };
  
  int main()
  {
      Foo foo;
  }
  </code></pre>
  
  <p>I am well aware of uniform initialization, like declaring <em>objects</em> using <code>{ }</code>, but did not know we can also call constructors. We <strong>cannot</strong> call functions though, the following <a href="http://ideone.com/yAx4Yl" rel="nofollow">doesn't compile</a>:</p>
  
  <pre><code>#include &lt;initializer_list&gt;
  
  void f(std::initializer_list&lt;int&gt;){}
  
  int main()
  {
      f{5}; // compile time error, must use f({5})
  }
  </code></pre>
  
  <p>So, to summarize, my question is the following: are there special rules when delegating constructors, that allow for calling a init-list constructor using only braces, like <code>Foo{something}</code>? </p>