
对于大括号初始化表达式的处理方式是auto类型推导和模板类型推导的唯一不同之处。当采用auto声明的变量使用大括号初始化表达式进行初始化时推导所得的类型是std::initializer_list的一个实例类型但是如果向对应的模板传入一个同样的初始化表达式类型推导将会失败。例如autox{1,2,3};// x 推导出来的类型是 std::initializer_listinttemplatetypenameTvoidf(T param);f({1,2,3});// 编译报错要想让f({1, 2, 3})通过编译则需要指定该模板中的param为std::initializer_listT例如templatetypenameTvoidf(std::initializer_listTparam);f({1,2,3});// T 的类型推导为 int从而 param 的类型为std::initializer_listint