2017-01-09 8 views
3

Boostソースをダウンロードすると、どのC++言語の標準バージョンをビルドに使用するべきかが示されていません。しかし、明らかに自動選択はありません。たとえば、少なくとも--std=c++11を設定しないと、C++ 11機能の設定チェックが失敗するためです。だから、それを設定するのはあなたの責任です。どのバージョンのBoostをビルドするのにどのC++標準バージョンを使用すべきかをどのように知っていますか?

しかし、どのBoostバージョンにどのC++標準バージョンを使用するのか知りたいのですが?どこかにテーブルのようですか?

具体的には、--std = C++ 14でBoost 1.62.0をビルドしたばかりで、非推奨となるsts::auto_ptrの使用について数え切れないほどの警告がありました。だから、私はC++ 11で立ち往生すべきでしょうか?どうすればわかりますか?

+0

これは、2014規格の警告なしでコンパイルが失敗するという悪い兆候です。 – Walter

+0

@Walter:公平ではありますが、それは最新のバージョンではありません(今は1.63.0です)。 – einpoklum

+1

ソースコードと同じバージョンを選択する必要があります。 BOOSTは主にヘッダーファイルなので、あなたはC++を選択してコンパイルします。 C++が下位互換性があるので、C++ 14のバージョンはC++ 98を問題なくコンパイルします。多分いくつかのdepracationエラーがあります。 – marcinj

答えて

-1

警告はエラーではありません。 C++ 14では、制限なしでstd :: auto_ptrをサポートしています。したがって、C++ 14を使用することはできますが、新しいコードでstd :: auto_ptrを使用しないでください。また、C++ 11でstd :: auto_ptrを使用しないでください。 編集:OPは接着剤を得ていないので。両方がそれをサポートするなら、それは何の違いもなく、彼は彼が好きなものを使うことができます。

+1

それは私の質問に対する答えではなく、コメントです。 – einpoklum

+0

OK、もっと簡単に言う:両方を使うことができます。 – user6556709

+0

正当な理由で警告が表示されます。彼らは通常、潜在的な問題を指摘し、良いコードは警告なしでコンパイルするべきです。しかし、経験豊富なプログラマーは警告を無視することができます。 IMHOこの場合、問題のコードは、対応するコンパイラフラグを無視するために(通常の '#pragma'命令を使用して)マークする必要があります。ただし、C++ 14が使用されている場合、boostは 'std :: auto_ptr'を使用すべきではありません。 – Walter

-1

いけないブーストを知っていますが、このような任意のC++コンパイラからC++バージョンを取得することができます -

if(__cplusplus == 201103L) std::cout << "C++11 " ; 
if(__cplusplus == 199711L) std::cout << "C++98 " ; 
    //... like this 
+0

それは私が尋ねたものではありません。 – einpoklum

+0

OPはそれを知っています。問題は、どのビルド・ブースト(ブースト・ソース・ファイルをコンパイルしてブースト・ライブラリーを生成する)時に使用するか、どのコンパイラー・オプション( '-std = C++ 11'または' -std = C++ 14') 。 – Walter

1

残念ながら、いくつかのブーストの開発者でもC(最新の標準とその実装を更新していない++ 11)あなたが提示した問題で。 互換性を維持するために使用できるマクロのセットはboost_configです。

しかし、通常、コンパイラの問題は新しいものではない古いものを使用しています。

+0

これらのマクロはBoostライブラリの作成者にとって便利です。あなたは本当に*私の質問に答えていません... – einpoklum

関連する問題