Namespaces
Variants

std:: has_facet

From cppreference.net
Определено в заголовочном файле <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 не является facet или если это volatile-квалифицированный facet.

Содержание

Параметры

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 Applied to Behavior as published Correct behavior
LWG 436 C++98 it was unclear whether Facet can be cv-qualified it can be const-qualified, but not volatile-qualified

Смотрите также

набор полиморфных фасадов, инкапсулирующих культурные различия
(класс)
получает фасад из локали
(шаблон функции)