Quelle partie de la spécification C++ limite la recherche dépendant d'un argument à la recherche de modèles de fonction dans l'ensemble des espaces de noms associés? En d'autres termes, pourquoi le dernier appel main
ci-dessous ne parvient pas à compiler?Pourquoi ADL ne trouve-t-il pas de modèles de fonction?
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.
}
Est-ce que cela signifie que vous vous attendez à travailler FRAB() sans écrire ns :: FRAB()? – Simon
Oui, à la manière d'une fonction non-template. – Hugh
FYI le code ci-dessus échoue également dans Comeau: http://www.comeaucomputing.com/tryitout/ - en ajoutant 'using namespace ns;' ou la qualification 'ns ::' passe la compilation. C'est une bonne question. – fbrereto