VS2012で作成したMFCプロジェクトをVS2015へコンバートしたらxmemory0でエラーがでた話

2019年6月23日

過去にVisual Studio 2012で作成したMFCプロジェクトを、Visual Studio 2015でコンバートしたところ、xmemory0 でのエラーが出てしまいました。

スポンサーリンク

エラー内容

C2338 The C++ Standard forbids containers of const elements because allocator is ill-formed.
C2535 'const std::basic_string<wchar_t,std::char_traits,std::allocator> *std::allocator<_Ty>:address(const std::basic_string<wchar_t,std::char_traits,std::allocator> &) noexcept const': メンバー関数は、既に定義または宣言されています。
C2535 'const std::basic_string<wchar_t,std::char_traits,std::allocator> *std::_Wrap_alloc<std::allocator<_Ty>>::address(const std::basic_string<wchar_t,std::char_traits,std::allocator> &) const': メンバー関数は、既に定義または宣言されています。

対策

とりあえずMSDNを見に行ったら、答えが書いてありました。

const 要素
C++ 標準には常に、const 要素の禁止コンテナーがあります (vector や set など)。 Visual C++ 2013 以前では、そのようなコンテナーは受け入れられていました。 現在のバージョンでは、そのようなコンテナーをコンパイルすることはできません。

https://msdn.microsoft.com/ja-jp/library/bb531344.aspx

ということで、プロジェクト内を検索して一通り const を削除したところ無事にビルドできるようになりました。

Stackoverflow にも質問している人がいました。
Xmemory errors in C++ project after migrating VS 2012 to VS 2015

おしまい。

スポンサーリンク