"without this, S would use bitwise comparison and the assertion would fail" ... I think it is definitely a bug, that already filed in bug 3789.
So this example is not a little good.

For better example, my proposal is:
```d
struct S { char[] a; char[] b;
    // Provides 'structural equality' for any other types.
    bool opEquals(T)(T rhs) { return this.tupleof == rhs.tupleof; }
}
struct T { string x, y; }
void main() {
    auto s = S("123".dup, "456".dup);
    auto t = T("123", "456");
    assert(s == t);
}
```