"Common type" of the ternary operator expressions
Ali Çehreli
acehreli at yahoo.com
Mon May 24 16:36:37 PDT 2010
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
For me, Object should always be at the top. I know that interfaces can
not inherit from classes; but as now the interfaces may have
implementations, perhaps it's time to make Object an interface, as
opposed to a class?
> class B : I {}
>
> void foo(I) {}
>
> void main()
> {
> bool some_condition;
> foo(some_condition ? new A : new B); // <-- compiler error
> }
>
> Compiler error:
>
> Error: function deneme.foo (I _param_0) is not callable using argument
> types (Object)
> Error: cannot implicitly convert expression (some_condition ? new A :
> new B) of type object.Object to deneme.I
Thank you,
Ali
More information about the Digitalmars-d-learn
mailing list