8

我正在尝试在 Ubuntu 上使用 GCC 5.1 编译一个使用 C++11 功能编写的库。但是,它抱怨std::unique_ptr没有定义。

gcc (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0
g++ (Ubuntu 5.1.0-0ubuntu11~14.04.1) 5.1.0

CXX 标志:

-std=c++11 -Wall -Wextra -Weffc++ -pedantic

输出:

error: ‘unique_ptr’ in namespace ‘std’ does not name a template type
         std::unique_ptr< detail::RegexImpl > m_pimpl;

但是,我可以在 OSX 上编译完全相同的代码。

Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)

CXX 标志:

-stdlib=libc++ -std=c++11 -Wall -Wextra -Weffc++ -pedantic

我究竟做错了什么?

4

1 回答 1

22

你没有做错什么。该库的源代码缺少#include <memory>.

这只是图书馆作者的一个不幸的错误。人们依赖某些标准头文件只是偶然在他们的特定实现中包含其他标准头文件,而没有检查他们是否使用了#include他们应该使用的所有语句,这令人惊讶地司空见惯。

你现在可以破解,#include但从长远来看,如果项目接受补丁,你应该向库作者提出一个错误,甚至可能贡献一个补丁。

于 2015-06-15T21:13:15.623 回答