Files
2025-10-25 03:02:53 +03:00

3.8 KiB
Raw Permalink Blame History

[locale.facet]

28 Text processing library [text]

28.3 Localization library [localization]

28.3.3 Locales [locales]

28.3.3.1 Class locale [locale]

28.3.3.1.2 Types [locale.types]

28.3.3.1.2.2 Class locale::facet [locale.facet]

🔗

namespace std {class locale::facet {protected:explicit facet(size_t refs = 0); virtual ~facet(); facet(const facet&) = delete; void operator=(const facet&) = delete; };}

1

#

Class facet is the base class for locale feature sets.

A class is a facet if it is publicly derived from another facet, or if it is a class derived from locale::facet and contains a publicly accessible declaration as follows:215static ::std::locale::id id;

2

#

Template parameters in this Clause which are required to be facets are those named Facet in declarations.

A program that passes a type that is not a facet, or a type that refers to a volatile-qualified facet, as an (explicit or deduced) template parameter to a locale function expecting a facet, is ill-formed.

A const-qualified facet is a valid template argument to any locale function that expects a Facet template parameter.

3

#

The refs argument to the constructor is used for lifetime management.

For refs == 0, the implementation performs delete static_cast<locale::facet*>(f) (where f is a pointer to the facet) when the last locale object containing the facet is destroyed; for refs == 1, the implementation never destroys the facet.

4

#

Constructors of all facets defined in this Clause take such an argument and pass it along to their facet base class constructor.

All one-argument constructors defined in this Clause are explicit, preventing their participation in implicit conversions.

5

#

For some standard facets a standard “…_byname” class, derived from it, implements the virtual function semantics equivalent to that facet of the locale constructed by locale(const char*) with the same name.

Each such facet provides a constructor that takes a const char* argument, which names the locale, and a refs argument, which is passed to the base class constructor.

Each such facet also provides a constructor that takes a string argument str and a refs argument, which has the same effect as calling the first constructor with the two arguments str.c_str() and refs.

If there is no “…_byname” version of a facet, the base class implements named locale semantics itself by reference to other facets.

215)215)

This is a complete list of requirements; there are no other requirements.

Thus, a facet class need not have a public copy constructor, assignment, default constructor, destructor, etc.