Результат имеет тип A
, потому что обе переменные имеют тип A
, и, по крайней мере, одна из них напрямую типа A
(не путем некоторого преобразования).
Компилятор просматривает обе части троичного выражения, и если одна из них является подтипом другой, все выражение становится более общим супертипом.
Однако если ни один из них не относится непосредственно к общему типу, то возникает ошибка компилятора , возможно, потому, что он не знает, сколько нужно выкинуть (и не хочет выяснять).
См. здесь :
Условный оператор (? :) возвращает одно из двух значений в зависимости от значения логического выражения.Ниже приводится синтаксис для условного оператора.
condition ? first_expression : second_expression;
[...]
Либо тип first_expression и second_expression должен совпадать, либо неявное преобразование должно существовать из одного типак другому.