The documentation http://www.digitalmars.com/d/2.0/arrays.html writes that "For the .sort property to work on arrays of structs or unions, the struct or union definition must define the function: int opCmp(S) or int opCmp(S*)". That is misleading, as, in my experience, a struct must implement exactly "int opCmp(ref const S) const" in order to get .sort work. Signatures which are a bit different do not work. The documentation should be updated as soon as possible, either informing the programmer about a current bug in the compiler, or clearly stating that only this signature works! In addition, I think that the compiler should warn about using a likely incorrect signature.
It is by design that only that specific overload works (see The D Programming Language). The documentation is wrong here.
https://github.com/D-Programming-Language/d-programming-language.org/commit/955530833c2221e934f24dd4f0c431b724e4db58