2

Clang を使用して C++ ライブラリ (g++ で正常にコンパイルされる) をコンパイルしようとしています。

ただし、何らかの理由で、stl コンテナーを使用するすべての場所でエラーが発生します。エラー メッセージは、ブースト セットを使用しようとしていることを示唆しているようですが、私はそうではないと思います。

どういうわけか としてエイリアスboostを作成した場所は信じていません。stdまた、実際にusingキーワードを使用したこともありません。

/Users/zennatavares/repos/cliques/cliques/../cliques/structures/disjointset.h:140:8: error: too few template arguments for class template 'set'
                std::set<int> visited_parents_;
                     ^
/usr/local/include/boost/detail/container_fwd.hpp:90:64: note: template is declared here
    template <class Key, class Compare, class Allocator> class set;
4

1 に答える 1

6

問題は、名前空間 std のメンバーを転送しようとするブーストであり、Boost は libc++ の転送宣言を間違っていると思います。そのような前方宣言を行うための移植可能な方法はないため、ブーストは実際にそれを行うべきではありません。名前空間 std 内で宣言すると、未定義の動作が発生します。

これは、これらの問題の 1 つに対してブーストに対して提出されたバグです。https://svn.boost.org/trac/boost/ticket/5197

問題を再現する完全なプログラムを投稿していただければ、この問題を解決するために何ができるかについて、より詳細な情報を提供できるかもしれません。

于 2012-04-08T21:47:32.833 に答える