次のコードがあるとします。
std::vector< int > from( 5 );
std::vector< int > to( 10 );
std::copy( from.begin(), from.begin() + 10, to.begin() );
それとも多分
std::vector< int >::iterator e = from.begin();
std::advance( e, 10 );
std::copy( from.begin(), e, to.begin() );
Visual Studio でデバッグ モードで実行すると、「イテレータが範囲外です」というテキストでアサートが失敗しました。GCC - LWS リンク- で実行したとき、何も得られませんでしたが、正しく動作しませんでした。
ここでの質問: 実行時にイテレータを比較して正しい範囲をオンにし、適切な例外をスローするかassert
、イテレータが範囲外の場合に呼び出す GCC オプションはありますか。
PS私は明らかに、コードが正しくなく、おそらくUBを持っていることを知っています。そして、私はそれを修正する方法を知っていますが、GCCが将来私を助けてくれることを望んでいます))