がSFINAEの正しいコード(demo)である: -コーダ・エラーを防ぐ - に "::タイプ" を追加することを忘れ "のstd :: enable_if <> ::タイプ"(SFINAE)
template<bool b> class C {
public: template<bool b2=b> typename std::enable_if<b2,void>::type f(){
cout<<"no!!";
}
};
int main() {
//C<false> c1; c1.f(); <-- not compilable (it is good)
C<true> c2; c2.f();
return 0;
}
私はC++にはまだ新しく、まだ慣れていません。その結果
、私は頻繁に::type
追加することを忘れ: -
public: template<bool b2=b> std::enable_if<b2,void> f(){
cout<<"no!!";
}
を、でもそれは間違っている、それは<false>
(demo)のためのコンパイルです。私の悪い日で
、私も限り行く: - それはまだ<false>
ためのコンパイルで
public: std::enable_if<b,void> f(){
cout<<"no!!";
}
! (demo)。
私はどのように間違っているのか知っていますが、私はしばしば実際にそのような間違いを犯します。
質問: この状況でコーダーのエラーを防ぐには、コンパイラーの警告の他に、どのようにしますか?
コンパイラの警告はなぜですか?このようなエラーを防ぐために作られています。 '-Werror'フラグを使ってコンパイルが成功しないことを確認したい場合 – user463035818
すべての警告を有効にしてコンパイルしてください。それは非void関数から値を返さないことについての警告を与えるはずです。 [例](http://coliru.stacked-crooked.com/a/b331b8b07a29d516) –
@ tobi303そんなに素人に聞こえるかもしれませんが、他のばかな証拠があるかどうか知りたいです。より良い=より良い。 XD – javaLover