Mingw は Windows API を使用しており、Windows はvswprintf
実装to_string
に使用される関数の適合バージョンを提供していません。Microsoft のせいです。
(非常に) 最近のバージョンの mingw-w64 フォークとリリースされていない GCC の 4.8 バージョンを使用している場合は動作しますが、メインの mingw32 と GCC 4.7.1 ではうまくいきません。
実装にパッチを当てたい場合は、http://tehsausage.com/mingw-to-stringにある解決策を試すことができますが、注意事項をよく読んでください。
アップデート:
のみstd::to_wstring
が壊れたvswprintf
関数の影響を受けるようです。そのため、GCC 4.9.3 (およびそれ以降のバージョン) に変更を加え、MinGW の 、 などを定義し、未定義のままにしstd::stoi
ます。std::stod
std::to_string
to_wstring
4.7.1 ヘッダーを自分で編集する場合は、関連するパッチを次に示します。
--- a/home/jwakely/gcc/4.7.1/include/c++/4.7.1/bits/basic_string.h
+++ b/home/jwakely/gcc/4.7.1/include/c++/4.7.1/bits/basic_string.h.fix
@@ -2808,8 +2808,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
-#if (defined(__GXX_EXPERIMENTAL_CXX0X__) && defined(_GLIBCXX_USE_C99) \
- && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
+#if (defined(__GXX_EXPERIMENTAL_CXX0X__) && defined(_GLIBCXX_USE_C99)
#include <ext/string_conversions.h>
@@ -2959,6 +2958,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
stold(const wstring& __str, size_t* __idx = 0)
{ return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); }
+#ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF
// DR 1261.
inline wstring
to_wstring(int __val)
@@ -3021,6 +3021,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
L"%Lf", __val);
}
#endif
+#endif
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace