Разница между std::isspace и std::iswspace (в шаблонах)
От: sanx  
Дата: 02.04.17 09:14
Оценка:
Допустим есть:
template <typename It>
void foo(It from, It last)
{
    // Здесь вызываю std::isspace или std::iswspace
}


Может быть вызов как
std::string s;
foo(s.begin(), s.end());
так и
std::wstring ws;
foo(ws.begin(), ws.end());

Нужно ли как-то учитывать версию std::isspace/std::iswspace?
Или в шаблоне подойдет одна std::isspace?
Ну и для остальных из cctype/cwctype типа std::toupper/std::towupper
Re: Разница между std::isspace и std::iswspace (в шаблонах)
От: N. I.  
Дата: 02.04.17 17:15
Оценка: 8 (1)
sanx:

S>Нужно ли как-то учитывать версию std::isspace/std::iswspace?


isspace не годится для передачи туда произвольных wchar_t значений. Если переданное значение не влазит в unsigned char и не является EOF, то будет undefined behavior.

iswspace может считать пробельными символы, которые не входят в перечень стандартных #9 – #13 и #32, даже если выставлена локаль C. Например, iswspace(160) != 0 может быть истинным.

S>Или в шаблоне подойдет одна std::isspace?


Мне не нравится мутная локале-зависимость этих функций, поэтому я их обе предпочитаю обходить стороной.

S>Ну и для остальных из cctype/cwctype типа std::toupper/std::towupper


Ни одна из этих функций не подходит для применения к произвольным Unicode code points (которые можно хранить в char32_t).
Отредактировано 02.04.2017 17:17 N. I. . Предыдущая версия .
Re: Разница между std::isspace и std::iswspace (в шаблонах)
От: Кодт Россия  
Дата: 03.04.17 09:56
Оценка:
Здравствуйте, sanx, Вы писали:

<>
S>Нужно ли как-то учитывать версию std::isspace/std::iswspace?
S>Или в шаблоне подойдет одна std::isspace?
S>Ну и для остальных из cctype/cwctype типа std::toupper/std::towupper

Как насчёт http://www.boost.org/doc/libs/1_63_0/doc/html/string_algo.html ?
Перекуём баги на фичи!
Re[2]: Разница между std::isspace и std::iswspace (в шаблонах)
От: uzhas Ниоткуда  
Дата: 03.04.17 10:13
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Как насчёт http://www.boost.org/doc/libs/1_63_0/doc/html/string_algo.html ?


эти функции в итоге сваливаются сюда: http://en.cppreference.com/w/cpp/locale/ctype/is
Re[3]: Разница между std::isspace и std::iswspace (в шаблонах)
От: Кодт Россия  
Дата: 03.04.17 11:11
Оценка:
Здравствуйте, uzhas, Вы писали:

U>эти функции в итоге сваливаются сюда: http://en.cppreference.com/w/cpp/locale/ctype/is


Это неизбежная плата за фасады к стандартному минимуму.

Для нормальной работы с интернационализацией нужно подтягивать что-нибудь типа ICU.
Перекуём баги на фичи!
Re[4]: Разница между std::isspace и std::iswspace (в шаблонах)
От: oziro Нигерия  
Дата: 03.04.17 11:27
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Для нормальной работы с интернационализацией нужно подтягивать что-нибудь типа ICU.


Кстати, есть какой-то аналог ICU? Может, более современный.