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:
static ::std::locale::id id;
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
.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
.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
.