似乎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它没有问题......
它是编译器错误还是标准不允许这样做?它似乎是一个非常明显的容器使用......
答案 0 :(得分:1)
通常,您不应期望编译此代码。为了确保它与任何符合标准的编译器一起编译,您必须使用以下或类似方式之一的额外级别的间接:
struct node { std::deque<node> *children; };
struct node { std::unique_ptr<std::deque<node>> children; };
struct node { std::deque<node*> children; };