For it's described usage (an opaque pointer for conveying information between xBestIndex() and xFilter()), having idxStr be a char * rather than void * would seem to make things awkward in the general case. What did the designer of the interface have in mind?