mr.*_*.pd 7 c++ templates auto c++11 type-deduction
基本上C++ 11中有三种类型的演绎:
auto
decltype
对于大多数情况,类型推导auto
和模板似乎以相同的方式起作用.但有一种情况 - 当我们将auto
变量设置为由括号封闭的{}初始化程序生成的值时,我们会得到编译错误
no match for call to '(std::initializer_list<int>) (<brace-enclosed initializer list>)' foo({0, 1, 2, 3});
Run Code Online (Sandbox Code Playgroud)
以下是代码实时示例的链接:http: //ideone.com/ODBAZ5
//foo's type would be deduced as std::initializer_list<int>
auto foo = {0, 1, 2, 3};
template<typename T>
void bar(T t){};
//compiles fine
bar( foo );
//next line gives compiler error
bar({0, 1, 2, 3});
Run Code Online (Sandbox Code Playgroud)
decltype
是一个完整的另一个故事,并且在这个问题的旁边,但是auto
模板应该做同样的事情(至少那些看似合理的东西),当推断出类型时 - 但是它们显然不会,而且它会让人感到困惑为什么?