Summary:
`toLowerAscii` is surprisingly hard to use with `std::string` because (until C++17) `data()` returns a `const char*`. In addition, it is not widely known that `s[0]` is legal even if the string is empty. This can lead to a variety of suboptimal code, from explicitly checking emptiness, to casting away the `const` (which causes UB).
Let's just have a simple overload for it.
Reviewed By: pixelb, philippv, yfeldblum
Differential Revision:
D5801970
fbshipit-source-id:
407e2e9e66147a0662a5e09c75921255adff0702
toLowerAscii(str.begin(), str.size());
}
+inline void toLowerAscii(std::string& str) {
+ // str[0] is legal also if the string is empty.
+ toLowerAscii(&str[0], str.size());
+}
+
template <
class Iterator = const char*,
class Base = folly::Range<boost::u8_to_u32_iterator<Iterator>>>