次のコードがあると、2番目foo
が部分的な特殊化と見なされ、後者がそうではない理由が少し混乱しています(IMOは両方とも部分的であってはなりません)。
template <bool IS_TRUE>
int foo();
// Doesn't work!?
template <bool IS_TRUE>
int foo<IS_TRUE>() {
return 0;
}
template <>
int foo<true>() {
return 0;
}
int main() {
return foo<true>();
}
2番目のfoo
gccで不平を言う:
エラー: 関数テンプレートの部分的な特殊化 'foo' は許可されていません
誰かが説明してくれませんか、私が見逃している詳細を教えてください。