Код: Выделить всё
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
В противном случае, если T2 является базовым классом T1, целевым типом является CV1 T2, где CV1 обозначает CV-квалификаторы T1; < /p>
< /blockquote>
Код: Выделить всё
CY()
В противном случае, Результатом является PRValue.
Если второй и третий операнды не имеют такого же типа, и либо имеет (возможно, CV-квалифицированный) тип класса, разрешение перегрузки < /strong> используется для определения конверсий (конверсии (конверсии (конверсии (конверсии Если таковые имеются) применяться к операндам ([over.match.oper], [over.built]).
Если разрешение перегрузки не стерж, программа плохо сформирована.
иначе, конверсии Таким образом, применяются, и преобразованные операнды используются вместо исходных операндов для оставшейся части этой подпункты. каким -то образом вызов y :: int () int () const , и это не должно сказать, вы можете сказать, из -за разреза. Верно?>
Подробнее здесь: https://stackoverflow.com/questions/794 ... rator-to-b