Почему операторы switch
и if
ведут себя по-разному с операторами преобразования?
struct WrapperA
{
explicit operator bool() { return false; }
};
struct WrapperB
{
explicit operator int() { return 0; }
};
int main()
{
WrapperA wrapper_a;
if (wrapper_a) { /** this line compiles **/ }
WrapperB wrapper_b;
switch (wrapper_b) { /** this line does NOT compile **/ }
}
Ошибка компиляции - это switch quantity is not an integer
а в выражении if
оно отлично распознается как bool
. (ССЗ)