2

を使用する古い RHEL5 マシンでいくつかのコードをコンパイルするために clang を使用しようとしていますlibstdc++4.4.7-std=c++0xフラグを有効にすると、次のようになります。

/usr/lib/gcc/i386-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/bits/vector.tcc:380:19: error: call to implicitly-deleted copy constructor of
  'value_type' (aka 'std::pair<double, double>')
          value_type __x_copy = __x;
                     ^          ~~~
/usr/lib/gcc/i386-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/bits/stl_vector.h:851:9: note: in instantiation of member function
  'std::vector<std::pair<double, double>, std::allocator<std::pair<double, double> > >::_M_fill_insert' requested here
  { _M_fill_insert(__position, __n, __x); }

これは、 clang サイトにパッチ(他のエラーは修正されましたが、このエラーは修正されませんでした)を適用した後のものです。無効にすると正常に動作します。パッチですべての問題が修正されたわけではないようですが、これは既知の問題ですか? また、既知の修正方法はありますか?-std=c++0x

4

1 に答える 1

2

パッチは不完全です。

Clang は正しく、コードが間違っていますstd::pair。Clang はムーブ コンストラクターを宣言しているため、コピー コンストラクターを削除する必要があります。 GCC 4.4 でサポートされている ++0x ドラフト

これをに追加することで修正できるはずですstd::pair

pair(const pair&) = default;
pair& operator=(const pair&) = default;

これにより、暗黙的に定義されたコピー操作が復元されるため、Clang はそれらを削除しません。

于 2013-02-28T18:20:48.823 に答える