現在、GCC の新しいバージョンではコンパイルできるが、古いバージョンではコンパイルできないコードを検討しています。私の場合、あるデータ構造からカスタム データ構造までのデータを使用しstd::back_inserter
ています。ただし、このカスタム データ構造std::copy
の typedef を忘れると、 GCC 4.4 でコンパイルされません。typedef value_type & const_reference
同じコードは、GCC 4.5 で問題なくコンパイルおよび実行されます。
これらの 2 つのコンパイラ バージョンの違いは何ですか。コードは一方のバージョンではコンパイルされますが、もう一方のバージョンではコンパイルされません。GCC 4.4 では完全ではなかった C++11 の実装と関係があると思います。おそらく何か、decltype
または別の新しい C++11 キーワードがあると思います。
std::back_inserter
また、型を定義せずに を使用した場合、このコードは正しいconst_reference
ですか? 通常、STL アルゴリズム ライブラリと互換性を持たせるには、typedef の完全なセット ( 、value_type
など) を実装する必要があると考えていました。または、この場合にコードがコンパイルされた場合、危険なもの (たとえば、他のデータ構造を破壊する移動セマンティクス) を呼び出していないと安全に想定できますか?reference
const_reference