http://bugs.winehq.org/show_bug.cgi?id=58465
Eric Pouech eric.pouech@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |eric.pouech@gmail.com
--- Comment #1 from Eric Pouech eric.pouech@gmail.com --- This likely stems from the fact that wchar_t is 32 bit on Linux. wineg++ (by default) forces 16bit wchar_t so that a wchar_t is matched with a WCHAR.
But that likely breaks libstd++ (this can be verified by passing -fshort-char to g++ in your repro test, which exhibits the same caveats as the wineg++ ones)
There's no simple solution I'm afraid here.
You may want to keep wchar_t as 32bit for compat with libstd++, and potentially other Linux libraries.
You can pass -fno-short-wchar to wineg++ to let wchar_t be 32bit. That will fix the libstd++ compat issues. But now, you're your on to deal with the wchar_t (32bit) <> WCHAR (16bit) discrepancy in strings std::u16string will be compatible with WCHAR though; but impact on existing codebase (replacing wstring with u16string; 16 <> 32 bit string conversions where required) has to be measured
You can move your app to PE format (where wchar_t will be 16bit, so std::wstring usage will be ok), but will require some more work to call to .so libs if needed