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 に答える