c++ - 为什么 clang 会混淆 Boost 和 STL?

标签 c++ boost stl header clang

我正在尝试使用 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/

相关文章:

C++ 递归段错误。你能帮我看看我做错了什么吗?

c++ - 关于direct3d关于D3DXCreateTextureFromFileEx的方法

c++ - 派生类错误 'no type named my_data in <base class>'

c++ - set_union() 返回的迭代器

c++ - 如何在 vector 中找到第一个小于整数 X 的元素? (c++)

c++ - Qt MetaObject 从单独的动态库继承检查

c++ - LNK2019和LNK1120带模板功能

c++ - "Reloading"一个 boost 定时器绑定(bind)到一个类方法

c++ - 带有进度信息的 Http 上传,在 C++ (Poco/Boost) 中

c++ - 如何让 tr1::array 分配对齐内存?