[facet.ctype.special.general]

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

## 28.3 Localization library [[localization]](localization#facet.ctype.special.general)

### 28.3.4 Standard locale categories [[locale.categories]](locale.categories#facet.ctype.special.general)

#### 28.3.4.2 The ctype category [[category.ctype]](category.ctype#facet.ctype.special.general)

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

#### 28.3.4.2.4.1 General [facet.ctype.special.general]

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

namespace std {template<>class ctype<char> : public locale::facet, public ctype_base {public:using char_type = char; explicit ctype(const mask* tab = nullptr, 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; };}

[1](#1)

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

A specialization ctype<char> is provided
so that the member functions on type char can be implemented inline[.](#1.sentence-1)[219](#footnote-219 "Only the char (not unsigned char and signed char) form is provided. The specialization is specified in the standard, and not left as an implementation detail, because it affects the derivation interface for ctype<char>.")

The implementation-defined value of
member table_size is at least 256[.](#1.sentence-2)

[219)](#footnote-219)[219)](#footnoteref-219)

Only the char (not unsigned char and signed char)
form is provided[.](#footnote-219.sentence-1)

The specialization is specified in the standard,
and not left as an implementation detail,
because it affects the derivation interface for ctype<char>[.](#footnote-219.sentence-2)
