On this page
C++ named requirements: CharTraits
CharTraits is a traits class that abstracts basic character and string operations for a given character type. Most standard library string and input/output classes require a CharTraits template type parameter alongside a corresponding character template type parameter.
Requirements
No operation listed below on CharTraits may throw an exception.
Given
CharT, a character typeX, a CharTraits type for typeCharTc,d, values of typeCharTp,q, values of type const CharT*s, a value of typeCharT*n,i,j, values of typestd::size_te,f, values of typeX::int_typepos, a value of typeX::pos_typestate, a value of typeX::state_typer, an lvalue of typeCharT
Types
| Type | Semantics |
|---|---|
X::char_type |
CharT |
X::int_type |
A type that can hold all valid values of X::char_type plus X::eof() |
X::off_type |
Invokes implementation-defined behavior if not std::streamoff when X is used as the traits template parameter in input/output classes. |
X::pos_type |
|
X::state_type |
Destructible, CopyAssignable, CopyConstructible, DefaultConstructible |
Expressions
| Expression | Return type | Semantics | Complexity |
|---|---|---|---|
X::eq(c, d) |
bool | Returns: whether c is to be treated as equal to d |
Constant |
X::lt(c, d) |
bool | Returns: whether c is to be treated as less than d |
Constant |
X::compare(p, q, n) |
int | Returns:
|
Linear |
X::length(p) |
std::size_t |
Returns: the smallest i such that X::eq(p[i], CharT()) is true |
Linear |
X::find(p, n, c) |
const X::char_type* | Returns:
|
Linear |
X::move(s, p, n) |
X::char_type* |
|
Linear |
X::copy(s, p, n) |
X::char_type* |
|
Linear |
X::assign(r, d) |
(Not used) | Assigns r = d |
Constant |
X::assign(s, n, c) |
X::char_type* |
|
Linear |
X::not_eof(e) |
X::int_type |
Returns:
|
Constant |
X::to_char_type(e) |
X::char_type |
Returns:
|
Constant |
X::to_int_type(c) |
X::int_type |
Returns: some value e, constrained by the definitions of X::to_char_type and X::eq_int_type |
Constant |
X::eq_int_type(e, f) |
bool |
|
Constant |
X::eof() |
X::int_type |
Returns: a value e such that X::eq_int_type(e, X::to_int_type(c)) is false for all values c |
Constant |
Standard library
CharTraits is required by the following standard library class templates as a template type parameter:
Strings |
|
| stores and manipulates sequences of characters (class template) |
|
|
(C++17)
|
read-only string view (class template) |
Streams |
|
| manages an arbitrary stream buffer (class template) |
|
wraps a given abstract device (std::basic_streambuf)and provides high-level input interface (class template) |
|
| implements high-level file stream input operations (class template) |
|
| implements high-level string stream input operations (class template) |
|
|
(C++23)
|
implements fixed character buffer input operations (class template) |
wraps a given abstract device (std::basic_streambuf)and provides high-level output interface (class template) |
|
| implements high-level file stream output operations (class template) |
|
| implements high-level string stream output operations (class template) |
|
|
(C++20)
|
synchronized output stream wrapper (class template) |
|
(C++23)
|
implements fixed character buffer output operations (class template) |
wraps a given abstract device (std::basic_streambuf)and provides high-level input/output interface (class template) |
|
| implements high-level file stream input/output operations (class template) |
|
| implements high-level string stream input/output operations (class template) |
|
|
(C++23)
|
implements fixed character buffer input/output operations (class template) |
Stream iterators |
|
input iterator that reads from std::basic_istream (class template) |
|
output iterator that writes to std::basic_ostream (class template) |
|
Stream buffers |
|
| abstracts a raw device (class template) |
|
| implements raw file device (class template) |
|
| implements raw string device (class template) |
|
|
(C++20)
|
synchronized output device wrapper (class template) |
|
(C++23)
|
implements raw fixed character buffer device (class template) |
Stream buffer iterators |
|
input iterator that reads from std::basic_streambuf (class template) |
|
output iterator that writes to std::basic_streambuf (class template) |
|
CharTraits is satisfied by the following standard library explicit specializations of std::char_traits:
|
(since C++20) (since C++11) (since C++11) |
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 335 | C++98 | the requirements on the binary overload ofassign did not prevent assignments to rvalues |
its first argument can only be an lvalue |
| LWG 352 | C++98 | X::state_type was onlyrequired to be CopyConstructible |
it is also required to be CopyAssignable and DefaultConstructible |
| LWG 3085 | C++98 | X::copy(s, p, n) only required p notin [s, s + n), which is too weak[1] |
requires [p, p + n) and[s, s + n) not to overlap |
[p,p + n)and[s,s + n)can overlap, usingstd::memcpyto implementX::copyresults in undefined behavior in this case.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/CharTraits