Perhaps you're right. The main practical reason for the above declarations is to avoid the need to have two versions of the function with the 'endptr' argument of type char ** and const char ** (note that, unlike with char * and const char *, char ** cannot be automatically converted to const char **). But perhaps it's better to sacrifice three more lines of code for the sake of clarity, so I'll discuss it with Mirek and I guess we'll agree on changing it.