我正在尝试使用 Clang 编译一个 C++ 库(在 g++ 中编译良好)。
但是由于某种原因,我在使用 STL 容器的任何地方都会遇到错误。错误消息似乎表明它认为我正在尝试使用 boost 集,但我认为我不是。
我不相信我在任何地方以某种方式将 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;
最佳答案
我认为问题是 boost 试图转发声明命名空间 std 的成员,而 Boost 对 libc++ 的转发声明是错误的。没有任何可移植的方式来做这样的前向声明,所以 boost 真的不应该这样做。在命名空间 std 内声明事物会导致未定义的行为。
这是针对其中一个问题针对 boost 提交的错误。 https://svn.boost.org/trac/boost/ticket/5197
如果您发布了一个完整的程序来重现该问题,那么也许我们可以提供更多详细信息,说明您究竟可以采取哪些措施来解决您的问题。
关于c++ - 为什么 clang 会混淆 Boost 和 STL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066706/