以下はコンパイルされません。
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);
ここで何が間違っているのか正確にはわかりません。コンパイラが関数の引数からテンプレート パラメーターを推測できないのはなぜですか?
これを機能させるにはどうすればよいですか?