2009-05 << 2009-06 >> 2009-07

2009-06-19 (金)

*C++

関数の引数の型に同じテンプレート引数が使われていても,最初のパラメータの型で固定してくれたりしないんですね.呼び出し時の型を決めてから,テンプレートを見に行くので仕方がないのか.

template<typename T>
T sum(T a,T b) {
    return a+b;
}

int main(int argc,int argv[])
{
    sum(1.0,1);
    return 0;
}

VC++でもgccでもコンパイルしてくれない.まぁ,明示的に完全に同じ型にしてあげれば良いのですが….

テンプレート引数増やして別の型にすれば解決するんじゃないかと思う人も多いでしょうが,書いていたコードではこうなっていたのです.

template<typename T>
T sum(T a,T b=T()) {
    return a+b;
}

この場合,二つ目の引数の型を分けてしまうと型が不明になって省略できなくなってしまいます.

nanika.png

2009-05 << 2009-06 >> 2009-07