c ++ shared_ptr ошибка с Intel 12.1.3 - PullRequest
3 голосов
/ 03 апреля 2012

С gcc 4.6.1 я использую следующий typedef

typedef std::shared_ptr<A> A_Ptr;

Я включил <memory> и скомпилировал его с -std=c++0x и все в порядке.

С intel 12.1.3тот же код, также скомпилированный с -std=c++0x, выдает ошибку

test_intel_gcc.cpp(7): error: qualified name is not allowed
  typedef std::shared_ptr<A> A_Ptr;

Вот минимальный пример:

#include <memory>

class A;

typedef std::shared_ptr<A> A_Ptr; 

class A {
public:     
  A() {}
};

int main(int argc, char *argv[]) {
  A_Ptr ap;
  return 0;
}

1 Ответ

2 голосов
/ 29 мая 2012

Внешний интерфейс EDG (который использует компилятор Intel) выдает эту ошибку, когда вы используете необъявленное, квалифицированное имя в typedef.Таким образом, это означает, что std::shared_ptr не объявлено в <memory>, что подразумевает либо то, что вы забыли использовать -std=c++0x (но вы говорите, что использовали это), либо ваш компилятор Intel использует заголовки из более старой версии GCC (а не 4.6).1 установка), которая не обеспечивает shared_ptr.

Вы должны быть в состоянии убедиться, что получаете ту же ошибку, изменив идентификатор шаблона на тот, который определенно не объявлен:

#include <memory>

class A;

typedef std::xxx_shared_ptr<A> A_Ptr; 
...