2

以下はコンパイルされません。

enum E {A,B,C};
template<E m> 
void foo(E m) {}

int main() {
    foo(A);
    return 0;
}

私が得るエラーは次のとおりです。

  • 'E m' の宣言: void foo(E m) {} : シャドウ テンプレート パラメータ 'E m'
  • エラー: 'foo(E)' の呼び出しに一致する関数がありません: foo(A);
  • 候補は: template void foo(E) : void foo(E m) {}
  • テンプレート引数の推測/置換に失敗しました: テンプレート パラメーター 'm' を推測できませんでした: foo(A);

ここで何が間違っているのか正確にはわかりません。コンパイラが関数の引数からテンプレート パラメーターを推測できないのはなぜですか?

これを機能させるにはどうすればよいですか?

4

3 に答える 3

2

私はあなたが書きたかったと思います:

enum E {A,B,C};
template<typename T> 
void foo(T m) {}

int main() {
    foo(A);
    return 0;
}
于 2015-07-06T15:46:28.973 に答える