Я пытаюсь скомпилировать библиотеку, написанную с функциями C ++ 11, используя GCC 5.1 на Ubuntu. Тем не менее, он жалуется 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
на данный момент, но в долгосрочной перспективе вы должны сообщить об ошибке автору библиотеки и, возможно, даже добавить патч, если проект принимает патчи.