Want to step into this comment too. Even if the compiler accepted this, it would still be wrong: The range might be of `ElementType`: `S`, and the `needle` would be of a non-matching type `T`, where `S.opEquals(T)` is defined, yet `is(T : S)` is plain false (eg: you can *compare* a S to a T, but you can't *build* a S from a T).