// https://issues.dlang.org/show_bug.cgi?id=19774 C bar() { return C(42); } C foo() { return bar()[1]; } C gun() { return bar()[$]; } struct C { int x; ~this() { x = 0; } int opDollar() { return 1; } C opIndex(int a) { return this; } } void main() { auto c = foo(); assert(c.x == 42); /* fails; should pass */ auto d = gun(); assert(d.x == 42); }