私はより大きなプロジェクト(g++.exe (MinGW.org GCC-6.3.0-1) 6.3.0
)をコンパイルするCMakeとMinGWを使用しています。私はブーストがロケールを生成した設定開始時にMinGWの数値書式設定が変更されました
とフォーマットを試してみてください。
//Global
std::locale myLoc;
// Init function
std::locale newLocale(boost::locale::generator().generate("C"));
std::locale::global(newLocale);
std::cerr << 1.1234 << std::endl;
myLoc = std::locale();
後、私は再び出力に番号をしたいが、突然、私はドイツのシステム上だと私は別の小数点(,
を持っています)しかし、ロケールは変更されていないようです。
std::cerr << (std::locale() == myLoc) << std::endl;
std::cerr << boost::lexical_cast<std::string>(1.1234) << std::endl;
std::cerr << std::use_facet<std::numpunct<char> >(std::locale()).decimal_point() << std::endl;
出力は次のとおりです。
1.1234
1
1,1234
.
だから、全部で:フォーマットは、最初は動作しますが、ロケールはまだ同じである、decimal_pointはまだ.
を返しますが、私は,
を取得します。これはどのように可能ですか?
これをMWEで再現することはできませんでしたが、これを調べるヒントがあれば感謝します。
boost :: lexical_castのような匂いは、C++ロケールの代わりにCロケールを使用します。まあ、それは彼らが再び修正することはできませんバグです:) –