Quale parte della specifica C++ limita la ricerca dipendente dall'argomento dall'individuazione di modelli di funzione nell'insieme di spazi dei nomi associati? In altre parole, perché l'ultima chiamata in main
non riesce a compilare?Perché ADL non trova i modelli di funzione?
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.
}
Vuol dire, che ci si aspetta di lavorare frob() senza scrivere ns :: frob()? – Simon
Sì, nel modo di una funzione non modello. – Hugh
FYI il codice di cui sopra non riesce in Comeau: http://www.comeaucomputing.com/tryitout/ - aggiungendo 'using namespace ns;' o la 'ns ::' qualificazione passa la compilazione. Questa è una buona domanda. – fbrereto