2016年1月2日土曜日

MinGWでC++11 (to_string)

ちょっとテキストファイルを別形式にコンバートする小物ツールを作る話がありました。

最終的にはギガバイト級のデータを扱いたいみたいなので、あとで速度を上げやすいようにC++で (なんと自分で選ぶのは初) やってみようかと思い、まずは速度度外視でアルゴリズムを作る段階。

生Cと違ってそれなりのstringクラスはあるようだけど、splitが無かったりしてあまり高機能では無いです。
とはいえ、c++11仕様をONにするとそれなりにいろんな機能が揃ってるようなので、-std=c++11オプションをつけてlinuxでちまちまと開発。


・・・と、そこまではよかったんですが、
年始でちょっと暇ができたところで、windows環境でのビルドも試そうと思って同じものをmingwでビルドしてみたら、無情にも

error: 'to_string' was not declared in this scope

と無常にもto_stringごときでエラーが出ました。


そんなわけないしー、ほかのc++11機能はとおってるしー、としばらく悩んだ末にぐぐってみると、MinGWのバグらしい…
This is a known bug under MinGW. Relevant Bugzilla. In the comments section you can get a patch to make it work with MinGW.
This issue has been fixed in MinGW-w64 distros higher than GCC 4.8.0 provided by the MinGW-w64 project. Despite the name, the project provides toolchains for 32-bit along with 64-bit.
(http://stackoverflow.com/questions/12975341/to-string-is-not-a-member-of-std-says-so-g)


パッチは出ているようですが、MinGW-w64を使えば問題ないみたいなのでそっちに乗り換え。
nuwanディストロ (http://nuwen.net/mingw.html) を拾ってきてただパス通すだけでOKでした。