使用 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 时它可以正常工作...
这是编译器错误还是标准不允许这样做?容器的使用似乎很明显...
一般来说,您不应期望此代码能够编译。为确保它可以使用任何符合标准的编译器进行编译,您必须通过以下或类似方式之一使用额外的间接级别:
struct node { std::deque<node> *children; };
struct node { std::unique_ptr<std::deque<node>> children; };
struct node { std::deque<node*> children; };
当不使用 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 时它可以正常工作...
这是编译器错误还是标准不允许这样做?容器的使用似乎很明显...
一般来说,您不应期望此代码能够编译。为确保它可以使用任何符合标准的编译器进行编译,您必须通过以下或类似方式之一使用额外的间接级别:
struct node { std::deque<node> *children; };
struct node { std::unique_ptr<std::deque<node>> children; };
struct node { std::deque<node*> children; };