X could be forward declared in which case you don't know what it can be converted from. And Y could provide operator X() so you would need Y's declaration too.
You could just say you don't want to let this type of C++ exist, and it's not up to Foo if it can control conversions when it's called. Or you could make Foo template the function instead of overload with delete, which also effectively prevents all conversions. It's all a bit awkward cuz that's how things are in this space.
If you required all constructors that aren't legit copy constructors to be marked explicit, then the delete could be required explicit and then you'd notice as an author maybe?