Qual tolower em C ++?

Dadostring foo, Eu escrevirespostas sobre como usarcctypeétolower converter os caracteres em minúsculas

transform(cbegin(foo), cend(foo), begin(foo), static_cast<int (*)(int)>(tolower))

Mas eu tenhocomeçou a considerar localeétolower, que poderia ser usado assim:

use_facet<ctype<char>>(cout.getloc()).tolower(data(foo), next(data(foo), foo.size()));
Existe um motivo para preferir um desses ao outro?Suas funcionalidades diferem?Quero dizer, além do fato de quetolower aceita e retorna umint que eu assumo é apenas algumas coisas antiquadas de C?

questionAnswers(3)

yourAnswerToTheQuestion