Hmm, it is something that when you define the template, you are looking at certain functions, but when it's specialized you do a second look. It's something to do with that
There isn't a "second look" when specializing templates. Template specialization doesn't inherently trigger a second name lookup. Name lookup happens in the context where a name is used (like inside the template definition) and follows the rules described in the standard, taking into account things like scope, access control, overload resolution, etc. Specialization itself doesn't change those rules