[char.traits.general] # 27 Strings library [[strings]](./#strings) ## 27.2 Character traits [[char.traits]](char.traits#general) ### 27.2.1 General [char.traits.general] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L32) Subclause [[char.traits]](char.traits "27.2 Character traits") defines requirements on classes representing[*character traits*](#def:character_traits), and defines a class templatechar_traits, along with five specializations,char_traits,char_traits,char_traits,char_traits, andchar_traits, that meet those requirements[.](#1.sentence-1) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L46) Most classes specified in [[string.classes]](string.classes "27.4 String classes"), [[string.view]](string.view "27.3 String view classes"), and [[input.output]](input.output "31 Input/output library") need a set of related types and functions to complete the definition of their semantics[.](#2.sentence-1) These types and functions are provided as a set of member [*typedef-name*](dcl.typedef#nt:typedef-name "9.2.4 The typedef specifier [dcl.typedef]")*s* and functions in the template parameter traits used by each such template[.](#2.sentence-2) Subclause [[char.traits]](char.traits "27.2 Character traits") defines the semantics of these members[.](#2.sentence-3) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L54) To specialize those templates to generate a string, string view, or iostream class to handle a particular character container type ([[defns.character.container]](defns.character.container "3.10 character container type"))C, that and its related character traits classX are passed as a pair of parameters to the string, string view, or iostream template as parameterscharT andtraits[.](#3.sentence-1) IfX​::​char_type is not the same type asC, the program is ill-formed[.](#3.sentence-2)