▁time . ▁As ▁a ▁demonstr ation , ▁the ▁standard ▁type ▁complex ▁does ▁not ▁define ▁the ▁< ▁operator , ▁because ▁there ▁is ▁no ▁strict ▁order ▁on ▁complex ▁numbers . ▁Therefore , ▁max ( x , ▁y ) ▁will ▁fail ▁with ▁a ▁compile ▁error , ▁if ▁x ▁and ▁y ▁are ▁complex ▁values . ▁Like wise , ▁other ▁templates ▁that ▁rely ▁on ▁< ▁cannot ▁be ▁applied ▁to ▁complex ▁data ▁unless ▁a ▁comparison ▁( in ▁the ▁form ▁of ▁a ▁fun ctor ▁or ▁function ) ▁is ▁provided . ▁E . g .: ▁A ▁complex ▁cannot ▁be ▁used ▁as ▁key ▁for ▁a ▁map ▁unless ▁a ▁comparison ▁is ▁provided . ▁Unfortunately , ▁comp ilers ▁histor ically ▁generate ▁somewhat ▁es oter ic , ▁long , ▁and ▁un help ful ▁error ▁messages ▁for ▁this ▁sort ▁of ▁error . ▁Ens uring ▁that ▁a ▁certain ▁object ▁ad her es ▁to ▁a ▁method ▁protocol ▁can ▁alle vi ate ▁this ▁issue . ▁L anguages ▁which ▁use ▁compare ▁instead ▁of ▁< ▁can ▁also ▁use ▁complex ▁values ▁as ▁keys . ▁ ▁The ▁second ▁kind ▁of ▁template , ▁a ▁class ▁template , ▁extends ▁the ▁same ▁concept ▁to ▁classes . ▁A ▁class ▁template ▁special ization ▁is ▁a ▁class . ▁Class ▁templates ▁are ▁often ▁used ▁to ▁make ▁generic ▁containers . ▁For ▁example , ▁the ▁ST L ▁has ▁a ▁linked ▁list ▁container . ▁To ▁make ▁a ▁linked ▁list ▁of ▁integers , ▁one ▁writes ▁list < int >. ▁A ▁list ▁of ▁strings ▁is ▁denoted ▁list < string >. ▁A ▁list ▁has ▁a ▁set ▁of ▁standard ▁functions ▁associated ▁with ▁it , ▁that ▁work ▁for