Por que o ADL não encontra modelos de função?

Que parte da especificação C ++ restringe a pesquisa dependente de argumento da localização de modelos de função no conjunto de espaços para nome associados? Em outras palavras, por que a última chamada emmain abaixo falha ao compilar?

namespace ns {
    struct foo {};
    template<int i> void frob(foo const&) {}
    void non_template(foo const&) {}
}

int main() {
    ns::foo f;
    non_template(f); // This is fine.
    frob<0>(f); // This is not.
}

questionAnswers(4)

yourAnswerToTheQuestion