こんにちは。
c++17を使いたいので、コンパイルオプションの/std:c++17 をつけてコンパイルすると
boost::bimapでコンパイルエラーになってしまいます。
MSVC2017の最新更新版、boost Version 1.66.0を使っています。
お聞きしたいのですが、/std:c++17を使うためにはboostのビルド時や使い方に特別な操作が必要なのでしょうか?詳しい方ご教授お願いします・・・
※「リンクエラー」ではなく「コンパイルエラー」なのでパスの設定等は合っていると思われます
//このコードでエラーが起きます
// /std:c++17 を消したり #include <boost/bimap.hpp> を消すと普通にコンパイルできます
#include <iostream>
#include <boost/bimap.hpp>
int main(int argc, char *argv[]) {
return EXIT_SUCCESS;
}
1>c:\boost\boost_1_66_0\boost\bimap\relation\support\data_extractor.hpp(43): error C2143: 構文エラー: ',' が '<' の前にありません。
1>c:\boost\boost_1_66_0\boost\bimap\relation\support\data_extractor.hpp(56): note: コンパイル対象の クラス テンプレート インスタンス化 'boost::bimaps::relation::support::data_extractor_implementation<boost::bimaps::relation::member_at::left,Relation>' のリファレンスを確認してください
1>c:\boost\boost_1_66_0\boost\bimap\relation\support\data_extractor.hpp(43): error C2518: 基底クラス リストにあるキーワード 'typename' は無効です。無視されます。
1>c:\boost\boost_1_66_0\boost\bimap\relation\support\data_extractor.hpp(60): error C2143: 構文エラー: ',' が '<' の前にありません。
1>c:\boost\boost_1_66_0\boost\bimap\relation\support\data_extractor.hpp(73): note: コンパイル対象の クラス テンプレート インスタンス化 'boost::bimaps::relation::support::data_extractor_implementation<boost::bimaps::relation::member_at::right,Relation>' のリファレンスを確認してください
・
・
(続く)
・
VS2017&/std:c++17でboost::bimapがコンパイルエラー
Re: VS2017&/std:c++17でboost::bimapがコンパイルエラー
ごめんなさいcodeをタグで囲むの忘れました次から気をつけます
Re: VS2017&/std:c++17でboost::bimapがコンパイルエラー
更に調べたところboostのバグレポに投げられて8か月放置されてるみたいです・・・
ttps://svn.boost.org/trac10/ticket/13306
もし何か知恵のある方がいらっしゃいましたらご教授ください。
ダメそうならboost切り離して自分で実装します・・・(boost_serializationくらいしか使ってないので)
ttps://svn.boost.org/trac10/ticket/13306
もし何か知恵のある方がいらっしゃいましたらご教授ください。
ダメそうならboost切り離して自分で実装します・・・(boost_serializationくらいしか使ってないので)
Re: VS2017&/std:c++17でboost::bimapがコンパイルエラー
確かに、上記エラーは1>c:\boost\boost_1_66_0\boost\bimap\relation\support\data_extractor.hpp(43): error C2143: 構文エラー: ',' が '<' の前にありません。
1>c:\boost\boost_1_66_0\boost\bimap\relation\support\data_extractor.hpp(56): note: コンパイル対象の クラス テンプレート インスタンス化 'boost::bimaps::relation::support::data_extractor_implementation<boost::bimaps::relation::member_at::left,Relation>' のリファレンスを確認してください
1>c:\boost\boost_1_66_0\boost\bimap\relation\support\data_extractor.hpp(43): error C2518: 基底クラス リストにあるキーワード 'typename' は無効です。無視されます。
1>c:\boost\boost_1_66_0\boost\bimap\relation\support\data_extractor.hpp(60): error C2143: 構文エラー: ',' が '<' の前にありません。
1>c:\boost\boost_1_66_0\boost\bimap\relation\support\data_extractor.hpp(73): note: コンパイル対象の クラス テンプレート インスタンス化 'boost::bimaps::relation::support::data_extractor_implementation<boost::bimaps::relation::member_at::right,Relation>' のリファレンスを確認してください
・
・
(続く)
・
https://svn.boost.org/trac10/ticket/13306
で示されている通り、std::unary_functionが原因のようです。
しかしながら、Boost Version 1.66.0ではstd::unary_functionを使わないコードに修正されているようです。
https://www.boost.org/doc/libs/1_66_0/b ... ractor.hpp
8127さんの使用しているBoostのコードは本当に1.66.0のものでしょうか?
Re: VS2017&/std:c++17でboost::bimapがコンパイルエラー
a5ua様、
インクルードしているソースを開いたところ、確かにstd::unary_functionに依存していて、
1.66.0のドキュメントとは異なっていました。
しかしインストールフォルダもboost_1_66_0になっていますし付属のindex.htmlを開いても
中にRelease 1.66.0と書いてあります・・・謎です
ですが、今の最新版は1.67.0のようなので、重い腰をあげてDL、ビルドしようと思います。
a5ua様、今回はありがとうございました。もし何かつまづいた場合のみまた連絡させていただきます。
インクルードしているソースを開いたところ、確かにstd::unary_functionに依存していて、
1.66.0のドキュメントとは異なっていました。
しかしインストールフォルダもboost_1_66_0になっていますし付属のindex.htmlを開いても
中にRelease 1.66.0と書いてあります・・・謎です
ですが、今の最新版は1.67.0のようなので、重い腰をあげてDL、ビルドしようと思います。
a5ua様、今回はありがとうございました。もし何かつまづいた場合のみまた連絡させていただきます。