我正在尝试在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
我究竟做错了什么?
您没有做错任何事。图书馆的资料缺少#include <memory>
。
这只是库作者的不幸错误。人们仅依靠某些标准标头,而恰巧在其特定实现中包括其他标准标头,却没有检查他们是否使用了所有#include
应有的语句,这是令人惊讶的普遍现象。
您可以暂时破解,#include
但是从长远来看,如果项目接受补丁,则应该向库作者提出一个错误,甚至可以贡献一个补丁。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句