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/w/cpp/locale/has_facet