title: Is strcpy where src == dest strictly defined?
body: <p>It's not too hard to demonstrate that <code>strcpy</code> on overlapped source and destination addresses fails on some platforms, either producing incorrect results or trapping (the latter with some negative random offsets on Linux/amd64).</p>
  
  <p>I'd instrumented a <code>strcpy</code> wrapper function for our codebase with an debug-build assertions that check for such overlapped copies, and have received a number of internal development requests to weaken this assertion checking so that it only raises an abortion for non-zero overlaps.</p>
  
  <p>I've been hesitant to do so, based on my read of the <a href="http://www.cplusplus.com/reference/cstring/strcpy/" rel="nofollow">strcpy documentation</a> since I'd assume that equal source and destinations would count as overlapped.  Is overlapped defined explicitly in the C++ standard (or C), and does this also include equality?  </p>
  
  <p>I suspect many vendor <code>strcpy</code> implementations special case this despite the freedom the standard allows to have this be undefined behavior.  Are there any platform/hardware combinations where such an equal copy is known to fail?</p>