&gt;  Then, developers write code that depends on those guarantees and fails to meet the preconditions, but happens to work anyway.<p>This reminds me of the memcpy&#x2F;memmove issue. You should use &quot;move&quot; when areas overlap, not memcpy<p>The real question is: why are there two versions? Checking if the memory overlap is <i>very cheap</i> compared to copying, let&#x27;s say 16 elements. And if you&#x27;re memcpy&#x27;ing smaller sizes you can probably do it manually<p>&gt; I know C and C++ can be a royal pain in the ass sometime<p>Yes, they lack enough information to know what you are actually trying to do and have to guess a lot of things. Not sure how &quot;C++ smart&quot; are modern compilers. (Example: you pass an object by value, and only read one field, can it optimize this?)