使用std :: deque和clang编译器

时间:2016-11-18 08:19:42

标签: c++ macos clang standards deque

似乎std :: deque不允许在不使用libstdc ++(10.9+ target)的情况下以osx的递归方式使用它

#include <deque>

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

int main() {
    node n;
}

这个简单的代码只有在我设置了MACOS_DEPLOYMENT_TARGET = 10.8时才能用clang编译(因为clang编译器与libstdc ++链接)但如果我尝试用libc ++编译(10.9+上的默认c ++目标)会产生很多错误,同时gcc 4/5它没有问题......

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

1 个答案:

答案 0 :(得分:1)

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

  1. struct node { std::deque<node> *children; };
  2. struct node { std::unique_ptr<std::deque<node>> children; };
  3. struct node { std::deque<node*> children; };