Условный оператор с производными и базовыми классами с оператором конверсии в встроенные типы проблемы, ошибка компилятоC++

Программы на C++. Форум разработчиков
Anonymous
Условный оператор с производными и базовыми классами с оператором конверсии в встроенные типы проблемы, ошибка компилято

Сообщение Anonymous »

Этот пример: < /p>

Код: Выделить всё

struct X {};
struct Y : X {};

using CY = const Y;

true ? X() : CY(); // error
< /code>
, который объясняется в этом ответе, можно изменить так: < /p>
struct X { operator int() { return 0; } };
struct Y : X { operator int() const { return 0; } };

using CY = const Y;

true ? X() : CY(); // compiles, and ?: expression yields prvalue of int
Проблема заключается в стандартном и связанном объяснении, которое основано на интерпретации стандарта, в пункте [expr.cond] p4.3.2, который говорит:
В противном случае, если T2 является базовым классом T1, целевым типом является CV1 T2, где CV1 обозначает CV-квалификаторы T1; < /p>

< /blockquote> операнд должен быть преобразован в тип const x , что означает, что при пункте [expr.cond] p6:

В противном случае, Результатом является PRValue.
Если второй и третий операнды не имеют такого же типа, и либо имеет (возможно, CV-квалифицированный) тип класса, разрешение перегрузки < /strong> используется для определения конверсий (конверсии (конверсии (конверсии (конверсии Если таковые имеются) применяться к операндам ([over.match.oper], [over.built]).
Если разрешение перегрузки не стерж, программа плохо сформирована.
иначе, конверсии Таким образом, применяются, и преобразованные операнды используются вместо исходных операндов для оставшейся части этой подпункты. каким -то образом вызов y :: int () int () const , и это не должно сказать, вы можете сказать, из -за разреза. Верно?>

Подробнее здесь: https://stackoverflow.com/questions/794 ... rator-to-b

Вернуться в «C++»