 <p>I think syntactical uniformity is quite important in generic programming. For instance consider,</p> <pre><code>#include &lt;utility&gt; #include &lt;tuple&gt; #include &lt;vector&gt; template &lt;class T&gt; struct Uniform { T t; Uniform() : t{10, 12} {} }; int main(void) { Uniform&lt;std::pair&lt;int, int&gt;&gt; p; Uniform&lt;std::tuple&lt;int, int&gt;&gt; t; Uniform&lt;int [2]&gt; a; Uniform&lt;std::vector&lt;int&gt;&gt; v; // Uses initializer_list return 0; } </code></pre>