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

我认为问题在于 boost 试图转发声明命名空间 std 的成员,而 Boost 对 libc++ 的转发声明是错误的。没有任何可移植的方式来做这样的前向声明,所以 boost 真的不应该这样做。在命名空间 std 中声明事物会导致未定义的行为。

这是针对其中一个问题提交的针对 boost 的错误。https://svn.boost.org/trac/boost/ticket/5197

如果您发布了一个完整的程序来重现该问题,那么也许我们可以提供更多详细信息,说明您可以采取哪些措施来解决您的问题。

于 2012-04-08T21:47:32.833 回答