【问题标题】:Use of std::deque and clang compiler [duplicate]使用 std::deque 和 clang 编译器 [重复]
【发布时间】:2017-04-02 00:32:23
【问题描述】:

当不使用 libstdc++(10.9+ 目标)时,似乎 std::deque 不允许在 osx 上使用 clang 以递归方式使用它

#include <deque>

struct node { std::deque<node> childs; };

int main() {
    node n;
}

只有当我设置 MACOS_DEPLOYMENT_TARGET=10.8(因为 clang 编译器与 libstdc++ 链接)时,这个简单的代码才使用 clang 编译,但如果我尝试使用 libc++(10.9+ 上的默认 c++ 目标)编译,它会给出很多错误,而使用gcc 4/5 它可以正常工作...

这是编译器错误还是标准不允许这样做?容器的使用似乎很明显......

【问题讨论】:

  • 什么错误?.....
  • 请注意,boost.container 库中的容器允许这样做。

标签: c++ macos clang standards deque


【解决方案1】:

通常,您不应期望此代码能够编译。为确保它与任何符合标准的编译器一起编译,您必须以下列方式之一或类似方式使用额外的间接级别:

  1. struct node { std::deque&lt;node&gt; *children; };
  2. struct node { std::unique_ptr&lt;std::deque&lt;node&gt;&gt; children; };
  3. struct node { std::deque&lt;node*&gt; children; };

【讨论】:

    猜你喜欢
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多