模板参数推导是否考虑了返回类型?

时间:2017-10-04 17:19:25

标签: c++ templates

我正在阅读" C ++模板:完整指南(第二版)",第10页。

根据本书,模板参数推导并不考虑返回类型。

  

模板演绎可以看作是重载解析的一部分。不基于选择返回类型的进程。唯一的例外是转换运算符成员的返回类型

任何示例都有助于在演绎中考虑返回类型。

2 个答案:

答案 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);      
}