私は現在、GCCの新しいバージョンでコンパイルできるいくつかのコードを見ていますが、古いバージョンではコンパイルできません。私の場合は、std::back_inserter
からstd::copy
までのデータを1つのデータ構造からカスタムデータ構造に使用しています。しかし、このカスタムデータ構造のtypedef value_type & const_reference
typedefを忘れてしまった場合、これはGCC 4.4でコンパイルされません。同じコードがコンパイルされ、GCC 4.5で正常に動作します。std :: back_inserterは古いGCCでconst_referenceが必要です。どうして?
これらの2つのコンパイラバージョンの違いは、コードをあるバージョンではコンパイルしますが、他のバージョンではコンパイルできません。私は、GCC 4.4ではあまり完全ではないC++ 11の実装と関係があると思います。おそらくdecltype
や別の新しいC++ 11キーワードを使っていると思います。
を使用してconst_reference
タイプを定義しないと、このコードも正しくなりますか?私は通常、STLアルゴリズムライブラリと互換性を持たせるために、typedef(value_type
、reference
、const_reference
など)のフルセットを実装しなければならないと考えましたか?または、私のコードがこの場合にコンパイルされた場合、私は危険な何かを呼び出すつもりはないと思います(例えば、私の他のデータ構造を破壊するセマンティクスの移動)。
(自分のような初心者の時間を節約するのに役立ちます): 'typedef T&reference; typedef const T&const_reference; ' 私のデータ構造に、back_inserterのエラーc2039はなくなりました。 –