"Common type" of the ternary operator expressions
Ali Çehreli
acehreli at yahoo.com
Mon May 24 22:25:28 PDT 2010
Ellery Newcomer wrote:
> On 05/24/2010 06:36 PM, Ali Çehreli wrote:
>> Ali Çehreli wrote:
>>> "Conditional Expressions" on this page covers the ternary operator as
>>> well:
>>>
>>> http://digitalmars.com/d/2.0/expression.html#ConditionalExpression
>>>
>>> It says "the second and third expressions are implicitly converted to
>>> a common type which becomes the result type of the conditional
>>> expression."
>>>
>>> How "common" should the "common type" be? Wouldn't you expect the
>>> following ternary operator's result be I, instead of Object?
>>>
>>> interface I {}
>>> class A : I {}
>>
>> My expectation is that the hierarchy of A should look like this:
>>
>> Object
>> |
>> I
>> |
>> A
>
> interfaces are not objects, so crush your expectations.
I guess this is how it actually is:
I Object
\ /
A
> Question: what should happen with
>
> class A : I, J {}
> class B : I, J {}
Good point. I think the error message threw me off:
Error: cannot implicitly convert expression (some_condition ? new A :
new B) of type object.Object to deneme.I
The compiler apparently does go up in the hierarchy, but it favors the
Object branch. (C++ does not try to find a common ancestor; stays with
the types A and B.)
Ali
More information about the Digitalmars-d-learn
mailing list