Une réponse à cette question pregunta dit dans le code suivant :
#include <vector>
using std::vector;
struct foo {
template<typename U>
void vector();
};
int main() {
foo f;
f.vector<int>(); // ambiguous!
}
La dernière ligne de main est ambiguë, car le compilateur ne recherche pas seulement vector
sur foo
mais aussi comme un nom non qualifié à partir de l'intérieur de main
. Il trouve donc à la fois std::vector
y foo::vector
. Pour résoudre ce problème, vous devez écrire
f.foo::vector<int>();
J'ai essayé ce programme sur tous les compilateurs C++ courants ( g++
, clang++
, vc++
et Intel C++ ) et tous les compilateurs compilent ce programme sans aucune erreur. Alors, pourquoi a-t-il dit qu'il y avait une ambiguïté dans ce programme ? Que dit la norme C++ à ce sujet ?