title: Why isn't std::initializer_list a language built-in?
body: <h2>Why isn't <code>std::initializer_list</code> a core-language built-in?</h2>
  
  <p>It seems to me that it's quite an important feature of C++11 and yet it doesn't have its own reserved keyword (or something alike).</p>
  
  <p>Instead, <code>initializer_list</code> it's <em>just</em> a template class from the standard library that has a special, implicit <em>mapping</em> from the new <em>braced-init-list</em> <code>{...}</code> syntax that's handled by the compiler.</p>
  
  <p>At first thought, this solution is quite <em>hacky</em>.</p>
  
  <p>Is this the way new additions to the C++ language will be now implemented: by <strong>implicit roles</strong> of some template classes and not by the <strong>core</strong> language?</p>
  
  <hr>
  
  <p><strong>Please consider these examples:</strong></p>
  
  <pre><code>   widget&lt;int&gt; w = {1,2,3}; //this is how we want to use a class
  </code></pre>
  
  <p>why was a new class chosen:</p>
  
  <pre><code>   widget( std::initializer_list&lt;T&gt; init )
  </code></pre>
  
  <p>instead of using something <strong>similar</strong> to any of these ideas:</p>
  
  <pre><code>   widget( T[] init, int length )  // (1)
     widget( T... init )             // (2)
     widget( std::vector&lt;T&gt; init )   // (3)
  </code></pre>
  
  <ol>
  <li>a classic array, you could probably add <code>const</code> here and there</li>
  <li>three dots already exist in the language (var-args, now variadic templates), why not re-use the syntax (and make it feel <em>built-in</em>)</li>
  <li>just an existing container, could add <code>const</code> and <code>&amp;</code></li>
  </ol>
  
  <p>All of them are already a part of the language. I only wrote my 3 first ideas, I am sure that there are <strong>many</strong> other approaches.</p>