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:

Каждая локаль, построенная в программе на С++, содержит по меньшей мере следующие стандартные грани [...]:

  • станд:: CType <char>
  • ...

Любая локаль, что означает, что даже локали, не относящиеся к объекту cout, будут поддерживать std::ctype<char>.