2016-11-18 3 views
0

кажется, что станд :: Deque не позволяет использовать его в рекурсивном образе с лязгом на OSX, когда не используется libstdC++ (10.9+ цели)Использования станда :: Deque и лязг компилятор

#include <deque> 

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

int main() { 
    node n; 
} 

Этого простой код компилируется с clang, только если я устанавливаю MACOS_DEPLOYMENT_TARGET = 10.8 (потому что компилятор clang связан с libstdC++), но он дает много ошибок, если я пытаюсь скомпилировать с libC++ (по умолчанию C++ target на 10.9+), а с gcc 4/5 он работает без проблем ...

Это ошибка компилятора или стандарт не позволяет это? Это кажется вполне очевидным использованием контейнера ...

+2

Что ошибки? ..... –

+0

Обратите внимание, что в библиотеке 'boost.container' есть контейнеры, которые разрешают это. – juanchopanza

ответ

0

В общем, вы не должны ожидать, что этот код будет скомпилирован. Для того, чтобы быть уверенными, что он компилируется с любым стандартным совместимым компилятором вы должны использовать дополнительный уровень косвенности в одном из следующих или аналогичных способов:

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