bool         is(mask m, charT c) const;
const charT* is(const charT* low, const charT* high, mask* vec) const;
const charT* scan_is(mask m, const charT* low, const charT* high) const;
const charT* scan_not(mask m, const charT* low, const charT* high) const;
charT        toupper(charT) const;
const charT* toupper(charT* low, const charT* high) const;
charT        tolower(charT c) const;
const charT* tolower(charT* low, const charT* high) const;
charT       widen(char c) const;
const char* widen(const char* low, const char* high, charT* to) const;
char         narrow(charT c, char dfault) const;
const charT* narrow(const charT* low, const charT* high, char dfault, char* to) const;
bool         do_is(mask m, charT c) const;
const charT* do_is(const charT* low, const charT* high, mask* vec) const;
const charT* do_scan_is(mask m, const charT* low, const charT* high) const;
const charT* do_scan_not(mask m, const charT* low, const charT* high) const;
charT        do_toupper(charT c) const;
const charT* do_toupper(charT* low, const charT* high) const;
charT        do_tolower(charT c) const;
const charT* do_tolower(charT* low, const charT* high) const;
charT        do_widen(char c) const;
const char*  do_widen(const char* low, const char* high, charT* dest) const;
char         do_narrow(charT c, char dfault) const;
const charT* do_narrow(const charT* low, const charT* high, char dfault, char* dest) const;
~ctype();
explicit ctype(const mask* tbl = 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;
const mask* table() const noexcept;
static const mask* classic_table() noexcept;
result out(
  stateT& state,
  const internT* from, const internT* from_end, const internT*& from_next,
  externT* to, externT* to_end, externT*& to_next) const;
result unshift(stateT& state, externT* to, externT* to_end, externT*& to_next) const;
result in(
  stateT& state,
  const externT* from, const externT* from_end, const externT*& from_next,
  internT* to, internT* to_end, internT*& to_next) const;
int encoding() const noexcept;
bool always_noconv() const noexcept;
int length(stateT& state, const externT* from, const externT* from_end, size_t max) const;
int max_length() const noexcept;
result do_out(
  stateT& state,
  const internT* from, const internT* from_end, const internT*& from_next,
  externT* to, externT* to_end, externT*& to_next) const;
result do_in(
  stateT& state,
  const externT* from, const externT* from_end, const externT*& from_next,
  internT* to, internT* to_end, internT*& to_next) const;
| Value | Meaning | |
| ok | completed the conversion | |
| partial | not all source characters converted | |
| error | encountered a character in [from, from_end)
that cannot be converted | |
| noconv | internT and externT are the same type, and input
sequence is identical to converted sequence | 
result do_unshift(stateT& state, externT* to, externT* to_end, externT*& to_next) const;
| Value | Meaning | |
| ok | completed the sequence | |
| partial | space for more than to_end - to destination elements was needed
to terminate a sequence given the value of state | |
| error | an unspecified error has occurred | |
| noconv | no termination is needed for this state_type | 
int do_encoding() const noexcept;
bool do_always_noconv() const noexcept;
int do_length(stateT& state, const externT* from, const externT* from_end, size_t max) const;
int do_max_length() const noexcept;