gcc 4.3.4是否支持unique_ptr?

时间:2013-07-25 06:08:59

标签: c++11 g++ unique-ptr

我一直在尝试在我的本地CygWin安装上使用g ++编译器实现PIMPL,我开始认为我可能正在运行g ++ 4.3.4,因为它的C ++ 11支持不太完美。

使用基线代码(来自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的{​​{1}}版本是否支持添加unique_ptr

其次,我只是在我的代码中犯了一些错误,使用错误的方式?

1 个答案:

答案 0 :(得分:4)

在您的第一个示例中,std::上缺少unique_ptr限定符。第二个例子is correct C++11

根据the GCC 4.4 release notesunique_ptr在4.4之前不在GCC的标准C​​ ++库中:

  

改进了对即将推出的ISO C ++标准C ++ 0x的实验支持,包括:

     

...

     
      
  • unique_ptr<algorithm>添加,异常传播以及<string><limits>中对新字符类型的支持。
  •