Cout Гарантировано, что Ctype <char> facet?
Учитывая: auto foo = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"s
Я могу преобразовать все символы в строчные буквы:
use_facet<ctype<char>>(cout.getloc()).tolower(data(foo), next(data(foo), foo.size()));
Live Example
Но это зависит от cout.getloc()
, содержащего ctype<char>
facet
.
Предполагая, что я использую unmodified cout
, могу предположить, что cout.getloc()
будет содержать facet
ctype<char>
или мне нужно подтвердить это перед использованием с помощью
has_facet<ctype<char>>(cout.getloc())
Ответы
Ответ 1
Из cppreference:
Каждая локаль, построенная в программе на С++, содержит по меньшей мере следующие стандартные грани [...]:
Любая локаль, что означает, что даже локали, не относящиеся к объекту cout
, будут поддерживать std::ctype<char>
.