列挙型を公開するクラスがあります。次のように、セッター関数で値の有効性を確認しようとしています。
enum abc
{
X,
Y
};
int my_class::set_abc(abc value)
{
if(static_cast<int>(value) > static_cast<int>(Y))
return -1;
...
}
値が X より小さい場合にも同様のチェックがあります。
コンパイラがチェックを完全に削除していることがわかります。その理由を Google で検索したところ、C++ での整数変換のルールを説明している多くのページに出くわしましたが、列挙型から int への変換や有効性のチェックについての説明は見つかりませんでした。
これを達成する正しい方法は何ですか?