:整数型の "signed-ness"に基づく部分テンプレートの特殊化?与えられた
template<typename T>
inline bool f(T n) {
return n >= 0 && n <= 100;
}
unsigned
タイプで使用する場合には、警告を生成します。
unsigned n;
f(n); // warning: comparison n >= 0 is always true
はT
がunsigned
タイプの場合に比較n >= 0
を行うにはない任意の巧妙な方法はありますか?私は部分的なテンプレートの専門化を追加しようとしました:gcc 4.2.1はそうではありませんが、部分的なテンプレートの専門化を追加しようとしました。 (とにかく部分テンプレート特殊化の種類が合法であるとは思わなかった)
ノートを参照してください。つまり、何が専門化されるか、何が過負荷になるか、どのように使用するかを過負荷解決が決定する方法に関する規則は、複雑で畳み込まれているため、完全な専門化は、通常、関数テンプレートにとっては悪い考えです。ありがたいことに、オーバーロードとSFINAE(置換エラーはエラーではありません)はここで十分です。 –
これについてClang 3.8(またはGCC 8.0)からの警告はありません。私が 'f'でテンプレートを削除した場合、私はそれを取得します。テンプレートのインスタンス化を考慮する '-Wtautological-compare'のバージョンがありますか? – user2023370