std::has_facet
Определён в заголовочном файле <locale> | ||
|---|---|---|
template< class Facet > bool has_facet( const locale& loc ) throw(); | (до C++11) | |
template< class Facet > bool has_facet( const locale& loc ) noexcept; | (начиная с C++11) |
Проверяет, реализует ли локаль loc фасет Facet.
Программа некорректна, если Facet не является фасетом или является фасетом с квалификатором volatile.
Параметры
| loc | - | объект локали для проверки |
Возвращаемое значение
Возвращает true, если фасет Facet был установлен в локали loc, и false в противном случае.
Примечания
std::has_facet должен возвращать true для всех локалей loc, если Facet является одним из стандартных фасетов, приведённых здесь.
Пример
#include <iostream>
#include <locale>
// minimal custom facet
struct myfacet : public std::locale::facet
{
static std::locale::id id;
};
std::locale::id myfacet::id;
int main()
{
// loc is a "C" locale with myfacet added
std::locale loc(std::locale::classic(), new myfacet);
std::cout << std::boolalpha
<< "Can loc classify chars? "
<< std::has_facet<std::ctype<char>>(loc) << '\n'
<< "Can loc classify char32_t? "
<< std::has_facet<std::ctype<char32_t>>(loc) << '\n'
<< "Does loc implement myfacet? "
<< std::has_facet<myfacet>(loc) << '\n';
}
Вывод:
Can loc classify chars? true Can loc classify char32_t? false Does loc implement myfacet? true
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| LWG 436 | C++98 | не было ясно, может ли Facet иметь квалификаторы cv | может иметь квалификатор const, но не volatile |
См. также
| набор полиморфных фасетов, инкапсулирующих культурные различия (класс) |
|
| получает фасет из локали (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/locale/has_facet