Visual Studio Community 2022でboost::assign::list_ofがコンパイルエラーになる

実現したいこと

過去のVisual Studio(恐らくVisual Studio 2005 Express Edition)でコンパイルできていた「boost::assign::list_ofを使ったコード」が、Visual Studio Community 2022でコンパイル不可能になっていたので、解決策を知りたいです。

発生している問題・エラーメッセージ

VC++

1#include <vector> 2#include <boost/assign.hpp> 3 4int main() 5{ 6 // OK 7 // 初期化の形になっていれば問題ない。 8 { 9 std::vector< long > v = boost::assign::list_of( 1 )( 2 )( 3 ); 10 } 11 12 // NG1 13 // 初期化の形になっていない場合は、下記のようなエラーが発生するようになった。 14 { 15 std::vector< long > v; 16 v = boost::assign::list_of( 1 )( 2 )( 3 ); 17 // エラー (アクティブ) E0350 複数の演算子 "=" がこれらのオペランドと一致します 18 // エラー C2593 '演算子 =' があいまいです 19 } 20 // NG2 21 // キャスト演算子で型を明示できないか?とダメ元で試したが失敗。 22 { 23 typedef std::vector< long > V; 24 V v; 25 26 v = ( V ) boost::assign::list_of( 1 )( 2 )( 3 ); 27 // エラー C2440 '型キャスト': 'boost::assign_detail::generic_list<int>' から 'V' に変換できません。 28 //message : コンストラクターはソース型を持てません、またはコンストラクターのオーバーロードの解決があいまいです。 29 30 v = static_cast< V >( boost::assign::list_of( 1 )( 2 )( 3 ) ); 31 // エラー C2440 'static_cast': 'boost::assign_detail::generic_list<int>' から 'V' に変換できません。 32 // message : コンストラクターはソース型を持てません、またはコンストラクターのオーバーロードの解決があいまいです。 33 34 } 35

初期化の形に直せる所はそれで済むのですが、直せない場合(つまり、既存のインスタンスにlist_ofで代入を行う場合)にどうしたら良いのかが不明です。
その場合はlist_ofの使用をやめるしかないのでしょうか?

試したこと

・上記ソースの通り、型の明示を試みましたがダメでした。
・Boostの1.59、1.82(最新)の2バージョンで試しましたが、結果は同じでした。
・構成「x86」「x64」の両方で試しましたが、結果は同じでした。
・「C2593 boost::assign」「"C2593" "boost" "assign"」などでググってみましたが、解決に至りませんでした。
「VSC2022+boost」の組み合わせなら必ず起こる現象であるのなら、ネット上に情報はありそうなものですが…私が何か見落としているのでしょうか。

コメントを投稿

0 コメント