У меня есть следующий код:
class A {
public:
operator int() const { return 5; }
};
class B {
public:
operator int() const { return 6; }
};
int main() {
A a;
B b;
int myInt = true ? a : b;
return 0;
}
Попытка скомпилировать этот код с Visual Studio 2017 RC приводит к ошибке: ternarytest.cpp(14): error C2446: ':': no conversion from 'B' to 'A'
что удивительно, потому что вы ожидаете, что он преобразует их как в общий тип (int).
Clang 4.0 скомпилирует тот же код успешно без каких-либо ошибок или предупреждений.
Какое из двух правильных в этом случае?