Nov 16, 2012 15:20
Сегодня у меня опять день ненависти к венде.
Вчера я колупалась с локалями в потоках. Выяснилось, что (начиная с Висты) они там переколбасили всё изнутри и теперь С++-ная локаль не устанавливается через setlocale, как оно обычно было раньше. Точее, устанавливается, но только если нет других потоков с выводом. А чтобы было для всех, теперь нужно ставить std::locale::global(locale("russian")) например, если для русского языка. Отдельную ненависть порождают сами константы локалей: почему весь мир юзает константы типа ru_RU.UTF-8, включая интернет, а виндузятники пишут Russian_Russia.65001? И почему, чёрт побери, у них до сих пор стандартная библиотека не может работать с локалями UTF-8 в консоли и попытка создать локаль с валидным именем (хоть и корявым) Russian_Russia.65001 вываливает эксепшн? Причём в юникоде с UTF-8 на экран пишутся кракозябры, а та же самая строка в ofstream совершенно нормально создаёт файл с нужным UTF-8 форматом. Мне этого не понять. В общем, уродство сплошное.
В итоге, локализацию для кроссплатформенного проекта пришлось делать через boost::locale. Причём в лине проект - unicode, а в венде - multibyte, хотя файлы локализации имеют формат UTF-8. Дурдом полный.
Каждый раз, когда я начинаю писать какой-то проект, я прикидываю, что мне потребуется. И вот в который раз я понимаю, что мало того, что система сама по себе кривая, так ещё и компилятор мелкософтовский - это какая-то жертва аборта.
Он не поддерживает списки инициализации. Ну, хрен бы с ними - можно и обойтись, хотя и неудобно.
Но он до сих пор не поддерживает variadic templates! Это стандарт С++11. GCC их с 2006 года поддерживает, между прочим.
В итоге, снова однозначное решение: нельзя юзать MSVC, даже последний. Несовместим со стандартами, однако. Только GCC, родимый.
msvs,
программирование,
ненависть,
лытдыбр,
венда,
С++11