先日 std::memcpy を使うコードを書いた。 void* memcpy( void* dest, const void* src, std::size_t count ); memcpy は src から dest へ count バイトだけコピーする簡単な関数だが、いくつか注意点があり、 その一つが、メモリの範囲がオーバーラップしていると動作が未定義という点である。 この点が気になったので assert でも書いておこうと思ったのだが*1、 ポインタ演算について調べてみると、どうもこれは(C++の規格の範囲内では)書けないんじゃないかと思い始めたりして、 色々迷走したのでそれについて調査過程を含めてここに記録しておく。 (規格文書を直接あたったわけでもない調査なので間違ったことを書いているかもしれません。ツッコミ歓迎。) そのオーバーラップ判定大丈夫? オーバーラップ判定コードは