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