https://issues.dlang.org/show_bug.cgi?id=20149
--- Comment #5 from Mike Franklin <slavo5...@yahoo.com> --- A more reduced test case: --- import std.stdio; @safe: struct ScopeBuffer { this(char[4] init) { this.buf = init; } // The bug is that `inout` implies `return` on `this`. // See https://github.com/dlang/dmd/blob/2dc5b15d1949148d460e8c809dd878e6dec8dfa3/src/dmd/func.d#L511-L513 inout(char)[] opSlice(size_t lower, size_t upper) inout do { return buf[lower .. upper]; //BUG: compiler error should be emitted here } char[4] buf; } char[] fun() { char[4] buf = "abcd"; auto sb = ScopeBuffer(buf); return sb[0..2]; } void main() { auto s = fun(); writeln(s); } --- https://run.dlang.io/is/Pu1125 The problem is that the compiler is inferring `return` on `this` when decorated with `inout`. This was discussed in issue 17927. --