Если коротко, то всё, что связано с std::locale
в MinGW не работает. Точка.
Зато вполне себе работает функционал из Си:
std::locale::global(std::locale("")); // не установит текущую локаль
setlocale(LC_ALL, ""); // установит текущую локаль, у меня это Russian_Russia.Cp1251
Ну и прицепом, что бы определить текущую кодировку не получится воспользоваться функционалом nl_langinfo():
const char *charset = nl_langinfo(CODESET);
его просто нет. Зато есть, в комплекте, libcharset, идущая вместе с GNU libiconv (в некоторых дистрибутивах Linux она тоже есть). Нужно только не забывать линковаться с iconv:
-liconv
Сам код:
#include <charset.h>
...
const char *charset = locale_charset(); // вернёт CP1251 для русской локали
Почти то же самое, на английском: http://www.haible.de/bruno/packages-libcharset.html