I don't think overriding the init in an extension is the right approach. Because CChar is a typealias of UInt8, calling UInt8("\n") should return the same value as CChar("\n"). Furthermore, CUnsignedChar, CSignedChar, CChar16, and CChar32 should also provide the same value. If this is to be changed, I think it should be done at the root, wherever Builtin converts the String to an Int (not sure where this happens). Also, what do you expect CChar("\n") return? nil seems expected as it does for every other non-integer String.