Are you saying that an implicit conversion sequence from int to void* does not exist? Or that it does exist but is not viable in this case?As far as I know, there can’t be no non-existing conversion sequence, but a sequence can happen to be empty, i.e. without any conversions.That being said, there is specified an „implicit null pointer conversion“ from a „null pointer constant“, which is either an „integer literal with value 0“ or a „prvalue of type std::nullptr_t“.If the evaluated argument is not a „null pointer constant“, there is no „implicit null pointer conversion“ and therefore it could happen that the conversion sequence for that argument is empty and therefore unable to convert.According to [over.match.viable]/4, a function F is only considered viable, if (despite other requirements) there exists for each argument an implicit conversion sequence **that converts that argument to the corresponding parameter of F**.So, given `foo(1, 1)`, there is no implicit conversion sequence that converts literal 1 to void* -> that overload is a candidate but not even viable at all.
at what point in the process is [conv.ptr]/1 considered?At least by [over.match.viable] and [over.match.best] (and generally by many others regarding different topics).
I'm fine with that. What follows from that ambiguity?The call is ill-formed.