假设以下模板定义(代码无意义):
template<class X, class Y>
bool FooBar(const Y& val) { return sizeof(X) + 4; }
Run Code Online (Sandbox Code Playgroud)
我发现以下调用代码是合法的:
float temp = 0.f;
FooBar<int>(temp);
Run Code Online (Sandbox Code Playgroud)
如您所见,Y可以省略第二个类型参数.编译器Y通过查看参数类型来推断类型temp.
什么规则或规范的C++模板允许这个?我很惊讶地看到它.