我正在阅读" C ++模板:完整指南(第二版)",第10页。
根据本书,模板参数推导并不考虑返回类型。
模板演绎可以看作是重载解析的一部分。不基于选择返回类型的进程。唯一的例外是转换运算符成员的返回类型
任何示例都有助于在演绎中考虑返回类型。
答案 0 :(得分:5)
struct A {
int value;
//conversion operator
template<class T>
operator T() {return static_cast<T>(value);}
};
A a{4};
float f = a; //conversion from A to float
答案 1 :(得分:0)
我还能想到另外一种情况:
template <typename A, typename B>
A foo(B)
{
cout << "Am I being instantiated? " << __PRETTY_FUNCTION__ << endl;
return A();
}
int main ( )
{
int(*fp)(int) = foo; // Instantiates "int foo(int) [A = int, B = int]"
fp(1);
}