ci_char_traits:type={this:std::char_traits<char>;to_upper:(ch:char)->char={returncpp2::unsafe_narrow<char>(std::toupper(chasint));}eq:(c1:char,c2:char)->bool={returnto_upper(c1)==to_upper(c2);}lt:(c1:char,c2:char)->bool={returnto_upper(c1)<to_upper(c2);}compare:(s1:*constchar,s2:*constchar,n:std::size_t)->int={(sv1:std::string_view=s1,sv2:std::string_view=s2,copyi:std::size_t=0)whilei<nnexti++{ifto_upper(sv1[i])<to_upper(sv2[i]){return-1;}ifto_upper(sv1[i])>to_upper(sv2[i]){return1;}}return0;}find:(s:*constchar,n:std::size_t,a:char)->*constchar={(sv:std::string_view=s,ua:=to_upper(a),copyi:std::size_t=0)whilei<nnexti++{ifto_upper(sv[i])==ua{std::advance(s,i);returns;}}returnnullptr;}}traits_cast:<DstTraits,CharT,SrcTraits>(src:std::basic_string_view<CharT,SrcTraits>)->std::basic_string_view<CharT,DstTraits>=={return(src.data(),src.size());}main:()={usingstd::literals::_;s1:=="Hello"sv;s2:=="heLLo"sv;iftraits_cast<ci_char_traits>(s1)==traits_cast<ci_char_traits>(s2){std::cout<<"(s1)$ and (s2)$ are equal\n";}}