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