Ошибка компилятора для условного оператора «?:» При использовании с оператором преобразования типов

Следующий код имеет простейшую форму:

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 ++?

[ Обновление Примечание : Интересно этот сценарий не генерирует такую ​​ошибку ]

9
задан iammilind 30 November 2011 в 10:54
поделиться