do not depend on CCError.t