Я пытаюсь реализовать PIMPL с помощью компилятора g ++ на моей локальной установке CygWin, и я начинаю думать, что это может быть тот факт, что я запускаю g ++ 4.3.4, поскольку его поддержка C++ 11 менее, чем идеально.Поддерживает ли gcc 4.3.4 unique_ptr?
С самого базового кода (от MSDN here):
my_class.h:
#include <memory>
class my_class {
public:
my_class();
private:
class impl; unique_ptr<impl> pimpl(new impl);
};
my_class.cpp:
#include "my_class.h"
class my_class::impl { int my_int; };
my_class::my_class(): pimpl(new impl) {};
Я пытаюсь скомпилировать с g++ -std=c++0x -o my_class.o my_class.cpp
и в конечном итоге с:
In file included from my_class.cpp:1:
my_class.h:8: error: ISO C++ forbids declaration of 'unique_ptr' with no type
my_class.h:8: error: invalid use of '::'
my_class.h:8: error: expected ';' before '<' token
my_class.cpp: In constructor 'my_class::my_class()':
my_class.cpp:5: error: class 'my_class' does not have any field named 'pimpl'
Я также получить, что если я заменяю -std=gnu++0x
.
В самом деле, когда я пытаюсь скомпилировать даже самый простой файл, поднятый из другого SO ответ:
#include <iostream>
#include <memory>
int main() {
std::unique_ptr<int> up(new int(30));
}
жалуется, что unique_ptr
не в std
пространстве имен.
gcc c++11 support page не имеет вход для unique_ptr
, но, глядя на сетку, это было довольно долгое время, по наименее так 4.4.
Так что мой вопрос, во-первых, в какой версии gcc
была поддержка unique_ptr
?
И, во-вторых, я просто делаю ошибку в моем костюме, используя это неправильно?