enum class pid
{
Alpha, Beta, Gamma
};
int main()
{
int propId = 2;
switch(propId)
{
case pid::Alpha:
case pid::Beta:
case pid::Gamma:
break;
}
}
上記のスニペットは、msvc2012 では正常にコンパイルされますが (動作します)、clang-3.4 および g++-4.8 では失敗します。これらはstatic_cast<pid>(propId)
、switch 句内で使用する必要があります。
ちなみに、明示的なキャストを伴わない単純な代入pid a = propId;
は、各コンパイラでエラーになります。
正解したのはどっち?