// https://issues.dlang.org/show_bug.cgi?id=20795 // REQUIRED_ARGS: -preview=dip1000 struct Foo { void opEquals(T)(T rhs) if (T.init.opCast!string) {} } struct Bar { void opEquals()(Bar) { Gun() == Foo(); } } class Baz { void opCast(T)() {} } struct Gun { void[24] buff; auto underlying() { return cast(Baz) buff.ptr; } alias underlying this; void opEquals(R)(R) if (Bar.init == R.init) {} }