0

このように、テンプレートでデフォルトのパラメーターを使用しようとしています

#include <iostream>

using namespace std;

template <typename S, typename T=int> 
S myadd(T a, T b)
{
    S tmp = a + b;
    return tmp;
}

int main()
{
    int a = 1, b = 2;
    float i = 5.1, j = 5.2;

    cout << myadd<int, int>(i, j);
    cout << myadd<float>(a, b);

    return 0;
}

次に g++ myadd.cpp

エラーが表示されます:

デフォルトのテンプレート引数は、-std=c++0x または -std=gnu++0x のない関数テンプレートでは使用できない場合があります

なぜこれが起こるのですか?

4

1 に答える 1

1

この回答を Stack Overflow の質問Default template arguments for function templatesから抽出しました。

C++ Templates: The Complete Guide (page 207) を引用するには:

テンプレートが最初に C++ 言語に追加されたとき、明示的な関数テンプレート引数は有効な構造ではありませんでした。関数テンプレートの引数は、常に呼び出し式から推定できる必要がありました。その結果、デフォルトは常に推定値によって上書きされるため、デフォルトの関数テンプレート引数を許可する説得力のある理由はないように思われました。

スタックオーバーフローの質問を読んで、さらに理解してください。注: 関数テンプレート C++ のデフォルト パラメータは、gnu++0x の新しい機能です。

于 2012-05-17T14:17:45.253 に答える