Fix char16_t tolower conversion

This commit is contained in:
momo5502
2025-06-07 11:25:51 +02:00
parent f048be8d9f
commit e26ac99551

View File

@@ -3,6 +3,7 @@
#include <string>
#include <vector>
#include <cstddef>
#include <cstdint>
#include <cwctype>
#include <algorithm>
#include <string_view>
@@ -43,21 +44,18 @@ namespace utils::string
return static_cast<char>(std::tolower(static_cast<unsigned char>(val)));
}
inline char16_t char_to_lower(const char16_t val)
{
if (val >= u'A' && val <= u'Z')
{
return val + 32;
}
return val;
}
inline wchar_t char_to_lower(const wchar_t val)
{
return static_cast<wchar_t>(std::towlower(val));
}
inline char16_t char_to_lower(const char16_t val)
{
static_assert(sizeof(char16_t) <= sizeof(wchar_t));
static_assert(sizeof(char16_t) == sizeof(uint16_t));
return static_cast<char16_t>(char_to_lower(static_cast<wchar_t>(static_cast<uint16_t>(val))));
}
template <class Elem, class Traits, class Alloc>
void to_lower_inplace(std::basic_string<Elem, Traits, Alloc>& str)
{