Следующий код имеет простейшую форму:
struct X {
operator char () const { return 'a'; }
};
int main ()
{
X obj, *p = &obj;
char a = *p; // ok
char c = (true)? *p : 'z';
}
Этот код выдает ошибку компилятора как,
error: операнды для? : имеют разные типы 'X' и 'char'
Почему * p
не разрешается в char
, когда нет неоднозначности в классе X
для приведения типов оператор?
Такое ложное сообщение об ошибке правильное или это ошибка g ++?
[ Обновление Примечание : Интересно этот сценарий не генерирует такую ошибку ]