Concept for encoding of Unicode characters. 
    typename Ch;    
 
    enum { supportUnicode = 1 }; 
 
    template<typename OutputStream>
    static void Encode(OutputStream& os, unsigned codepoint);
 
    template <typename InputStream>
    static bool Decode(InputStream& is, unsigned* codepoint);
 
    template <typename InputStream, typename OutputStream>
    static bool Validate(InputStream& is, OutputStream& os);
 
    
 
    template <typename InputByteStream>
    static CharType TakeBOM(InputByteStream& is);
 
    template <typename InputByteStream>
    static Ch Take(InputByteStream& is);
 
    template <typename OutputByteStream>
    static void PutBOM(OutputByteStream& os);
 
    template <typename OutputByteStream>
    static void Put(OutputByteStream& os, Ch c);
};
Concept for encoding of Unicode characters.