Can't compile C++11 source using GCC 5.1 toolchain

Thijs picture Thijs · Jun 15, 2015 · Viewed 8.3k times · Source

I'm trying to compile a library written with C++11 features using GCC 5.1 on Ubuntu. However, it complains std::unique_ptr is not defined.

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 flags:

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

Output:

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

However, I'm able to compile the exact same code on OSX.

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

CXX flags:

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

What am I doing wrong?

Answer

Lightness Races in Orbit picture Lightness Races in Orbit · Jun 15, 2015

You're not doing anything wrong. The library's source is missing an #include <memory>.

This is simply an unfortunate error by the author of the library. It's surprisingly commonplace for people to rely on certain standard headers just so happening to include other standard headers on their particular implementation, without checking that they're using all the #include statements that they should.

You could hack the #include in for now but, long term, you should raise a bug with the library author and maybe even contribute a patch, if the project accepts patches.