[facet.ctype.char.members]

# 28 Text processing library [[text]](./#text)

## 28.3 Localization library [[localization]](localization#facet.ctype.char.members)

### 28.3.4 Standard locale categories [[locale.categories]](locale.categories#facet.ctype.char.members)

#### 28.3.4.2 The ctype category [[category.ctype]](category.ctype#facet.ctype.char.members)

#### 28.3.4.2.4 ctype<char> specialization [[facet.ctype.special]](facet.ctype.special#facet.ctype.char.members)

#### 28.3.4.2.4.3 Members [facet.ctype.char.members]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L1778)

In the following member descriptions,
for unsigned char values v where v >= table_size,table()[v] is assumed to have an implementation-specific value
(possibly different for each such value v)
without performing the array lookup[.](#1.sentence-1)

[ð](#lib:ctype%3cchar%3e,constructor)

`explicit ctype(const mask* tbl = nullptr, bool del = false, size_t refs = 0);
`

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L1792)

*Preconditions*: Either tbl == nullptr is true or
[tbl, tbl + table_size) is a valid range[.](#2.sentence-1)

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L1797)

*Effects*: Passes its refs argument to its base class constructor[.](#3.sentence-1)

[ð](#lib:ctype%3cchar%3e,is)

`bool        is(mask m, char c) const;
const char* is(const char* low, const char* high, mask* vec) const;
`

[4](#4)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L1809)

*Effects*: The second form, for all *p in the range [low, high),
assigns into vec[p - low] the value table()[(unsigned char)*p][.](#4.sentence-1)

[5](#5)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L1814)

*Returns*: The first form returns table()[(unsigned char)c] & m;
the second form returns high[.](#5.sentence-1)

[ð](#lib:ctype%3cchar%3e,scan_is)

`const char* scan_is(mask m, const char* low, const char* high) const;
`

[6](#6)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L1826)

*Returns*: The smallest p in the range [low, high) such thattable()[(unsigned char) *p] & m is true[.](#6.sentence-1)

[ð](#lib:ctype%3cchar%3e,scan_not)

`const char* scan_not(mask m, const char* low, const char* high) const;
`

[7](#7)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L1841)

*Returns*: The smallest p in the range [low, high) such thattable()[(unsigned char) *p] & m is false[.](#7.sentence-1)

[ð](#lib:ctype%3cchar%3e,toupper)

`char        toupper(char c) const;
const char* toupper(char* low, const char* high) const;
`

[8](#8)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L1857)

*Returns*: do_toupper(c) or do_toupper(low, high), respectively[.](#8.sentence-1)

[ð](#lib:ctype%3cchar%3e,tolower)

`char        tolower(char c) const;
const char* tolower(char* low, const char* high) const;
`

[9](#9)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L1869)

*Returns*: do_tolower(c) or do_tolower(low, high), respectively[.](#9.sentence-1)

[ð](#lib:ctype%3cchar%3e,widen)

`char  widen(char c) const;
const char* widen(const char* low, const char* high, char* to) const;
`

[10](#10)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L1881)

*Returns*: do_widen(c) ordo_widen(low, high, to), respectively[.](#10.sentence-1)

[ð](#lib:ctype%3cchar%3e,narrow)

`char        narrow(char c, char dfault) const;
const char* narrow(const char* low, const char* high, char dfault, char* to) const;
`

[11](#11)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L1895)

*Returns*: do_narrow(c, dfault) ordo_narrow(low, high, dfault, to),
respectively[.](#11.sentence-1)

[ð](#lib:ctype%3cchar%3e,table)

`const mask* table() const noexcept;
`

[12](#12)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/text.tex#L1910)

*Returns*: The first constructor argument, if it was nonzero,
otherwise classic_table()[.](#12.sentence-1)
