C++ベース-関数テンプレートのタイプ導出の補足


ここでふと一つの問題を思いついた.
template<typename T>
void foo()
{
    T x = T();
}

template<typename T>
void foo2(T x)
{
    ++x;
}

template<typename T1, typename T2>
void foo3(T1 x)
{

}

int main(int, char**)
{
    foo<int>();             //   
    foo();                  //   ,          

    foo2(5);                //   ,       

    foo3(5);                //   ,       T1
    foo3<int>(5);           //   ,         T2
    foo3<int, double>(5);   //   
    return 0;
}

パラメータなしの関数テンプレートはクラステンプレートと同様にタイプ導出を行うことができず,関数テンプレートのタイプ導出メカニズムはパラメータマッチングの形式でタイプ導出を行うことが分かった.