std::initializer_listコア言語が組み込まれていないのはなぜですか?
これはC ++ 11の非常に重要な機能であり、独自の予約済みキーワード(または同様のもの)がないように思えます。
代わりに、initializer_listそれはだだけで、特別な、暗黙の持っている標準ライブラリのテンプレートクラスのマッピング新しいからブレース-のinit-リスト {...}コンパイラによって処理の構文を。
最初は、このソリューションはかなりハックです。
これは、C ++言語への新しい追加が実装される方法ですか?コア言語ではなく、いくつかのテンプレートクラスの暗黙のロールによって?
これらの例を検討してください:
   widget<int> w = {1,2,3}; //this is how we want to use a class
新しいクラスが選ばれた理由:
   widget( std::initializer_list<T> init )
これらのアイデアのいずれかに類似したものを使用する代わりに:
   widget( T[] init, int length )  // (1)
   widget( T... init )             // (2)
   widget( std::vector<T> init )   // (3)
- 古典的な配列、おそらく
constあちこちに追加できます - 言語にはすでに3つのドット(var-args、現在は可変テンプレート)があります。構文を再利用してください(組み込みのように感じてください)。
 - 既存のコンテナだけを追加して
const、& 
それらのすべてはすでに言語の一部です。私は最初の3つのアイデアを書いただけで、他にも多くのアプローチがあると確信しています。
std::array<T>は「言語の一部」ではありませんstd::initializer_list<T>。そして、これらは、言語が依存している唯一のライブラリコンポーネントではありません。参照new/ delete、type_info、さまざまな例外タイプ、size_tなど
                const T(*)[N]ので、非常によく似ているどのように動作するかを、std::initializer_list作品。