使用 std::deque 和 clang 编译器

Use of std::deque and clang compiler

当不使用 libstdc++(10.9+ 目标)

时,std::deque 似乎不允许在 osx 上以递归方式使用它
#include <deque>

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

int main() {
    node n;
}

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

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

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

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