This function signature *does* guarantee that src and self don't overlap, unlike the C and D versions. Personally, I think that's at least as important as whether the function's pure or not.
Oops, forgot the "restrict" keyword. It is there in the C and D versions.
