ページ 11

VS2017&/std:c++17でboost::bimapがコンパイルエラー

Posted: 2018年7月11日(水) 23:10
by 8127
こんにちは。
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>' のリファレンスを確認してください


(続く)

Re: VS2017&/std:c++17でboost::bimapがコンパイルエラー

Posted: 2018年7月11日(水) 23:44
by 8127
ごめんなさいcodeをタグで囲むの忘れました次から気をつけます

Re: VS2017&/std:c++17でboost::bimapがコンパイルエラー

Posted: 2018年7月12日(木) 22:51
by 8127
更に調べたところboostのバグレポに投げられて8か月放置されてるみたいです・・・
ttps://svn.boost.org/trac10/ticket/13306

もし何か知恵のある方がいらっしゃいましたらご教授ください。
ダメそうならboost切り離して自分で実装します・・・(boost_serializationくらいしか使ってないので)

Re: VS2017&/std:c++17でboost::bimapがコンパイルエラー

Posted: 2018年7月13日(金) 00:49
by a5ua
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がコンパイルエラー

Posted: 2018年7月13日(金) 01:15
by 8127
a5ua様、

インクルードしているソースを開いたところ、確かにstd::unary_functionに依存していて、
1.66.0のドキュメントとは異なっていました。
しかしインストールフォルダもboost_1_66_0になっていますし付属のindex.htmlを開いても
中にRelease 1.66.0と書いてあります・・・謎です

ですが、今の最新版は1.67.0のようなので、重い腰をあげてDL、ビルドしようと思います。
a5ua様、今回はありがとうございました。もし何かつまづいた場合のみまた連絡させていただきます。