namespace std {
template <>
class ctype<char> : public locale::facet, public ctype_base {
public:
using char_type = char;
explicit ctype(const mask* tab = 0, bool del = false,
size_t refs = 0);
bool is(mask m, char c) const;
const char* is(const char* low, const char* high, mask* vec) const;
const char* scan_is (mask m,
const char* low, const char* high) const;
const char* scan_not(mask m,
const char* low, const char* high) const;
char toupper(char c) const;
const char* toupper(char* low, const char* high) const;
char tolower(char c) const;
const char* tolower(char* low, const char* high) const;
char widen(char c) const;
const char* widen(const char* low, const char* high, char* to) const;
char narrow(char c, char dfault) const;
const char* narrow(const char* low, const char* high, char dfault,
char* to) const;
static locale::id id;
static const size_t table_size = implementation-defined;
const mask* table() const noexcept;
static const mask* classic_table() noexcept;
protected:
~ctype();
virtual char do_toupper(char c) const;
virtual const char* do_toupper(char* low, const char* high) const;
virtual char do_tolower(char c) const;
virtual const char* do_tolower(char* low, const char* high) const;
virtual char do_widen(char c) const;
virtual const char* do_widen(const char* low,
const char* high,
char* to) const;
virtual char do_narrow(char c, char dfault) const;
virtual const char* do_narrow(const char* low,
const char* high,
char dfault, char* to) const;
};
}
Предоставляется специализация, позволяющая реализовать ctype<char> функции-члены по типу . Определяемое реализацией значение member не менее 256.charinline235table_size
Только char (не unsigned char и signed char) форма предоставляется. Специализация указывается в стандарте и не остается в качестве детали реализации, поскольку она влияет на интерфейс деривации для ctype<char>.
~ctype();
В следующих описаниях членов для unsigned char значений, v где предполагается, что они имеют значение v >= table_size, table()[v] зависящее от реализации (возможно, различное для каждого такого значения v), без выполнения поиска в массиве.
explicit ctype(const mask* tbl = 0, bool del = false,
size_t refs = 0);
bool is(mask m, char c) const;
const char* is(const char* low, const char* high,
mask* vec) const;
Effects: Вторая форма для всех *p в диапазоне [low, high)присваивается vec[p - low] значению table()[(unsigned char)*p].
const char* scan_is(mask m,
const char* low, const char* high) const;
const char* scan_not(mask m,
const char* low, const char* high) const;
Returns: Наименьшее p в диапазоне [low, high) такое, что
table()[(unsigned char) *p] & m
есть false.
char toupper(char c) const;
const char* toupper(char* low, const char* high) const;
char tolower(char c) const;
const char* tolower(char* low, const char* high) const;
char widen(char c) const;
const char* widen(const char* low, const char* high,
char* to) const;
char narrow(char c, char dfault) const;
const char* narrow(const char* low, const char* high,
char dfault, char* to) const;
const mask* table() const noexcept;
static const mask* classic_table() noexcept;
char do_toupper(char) const; const char* do_toupper(char* low, const char* high) const; char do_tolower(char) const; const char* do_tolower(char* low, const char* high) const; virtual char do_widen(char c) const; virtual const char* do_widen(const char* low, const char* high, char* to) const; virtual char do_narrow(char c, char dfault) const; virtual const char* do_narrow(const char* low, const char* high, char dfault, char* to) const;
Эти функции описаны так же, как и члены с тем же именем в ctype class template.