On 12/23/2014 10:17 PM, Andrei Alexandrescu wrote:
On 12/23/14 8:54 PM, Walter Bright wrote:

The current behavior of:

     is (D : B)

is the expression will evaluate to false if D does not compile. However,
a compile time error will be issued if B does not compile.

If D and B compile, then it will evaluate to false if B is not
implicitly convertible to D. This suggests to me Option 1, i.e. if the
implicit conversion fails due to ambiguity errors, then it should return
false (not issue a compile time error).

Though I agree it makes sense to just return false, I think it would be more
sensible and useful to issue an error. If B is reachable from B through multiple
paths, that's a new situation distinct from yes/no.

That would be inconsistent with how 'is' works for other types.


In fact a better thought: as soon as D is defined, repeated subtyping should be
detected as an error. Then there's no question about "is" in the first place 
:o).

That's a good idea, but I think it is unworkable. What is the set of types that B is implicitly convertible too? It's unbounded.

Reply via email to