Le bit de code suivant ne parvient pas à être compilé. L'erreur semble être une sorte d'appel ambigu à la routine de fusion. Ma compréhension est que STL a une routine de fusion trouvée dans l'espace de noms std, mais autant que je peux dire que la fusion de noms dans le code ci-dessous devrait être unique.Erreur de compilateur C++ ambiguë
Si je renommer la fusion en xmerge, tout fonctionne. Quel pourrait être le problème? D'où vient l'affrontement?
#include <iostream>
#include <iterator>
#include <vector>
template<typename InputIterator1,
typename InputIterator2,
typename OutputIterator>
void merge(const InputIterator1 begin1, const InputIterator1 end1,
const InputIterator2 begin2, const InputIterator2 end2,
OutputIterator out)
{
InputIterator1 itr1 = begin1;
InputIterator2 itr2 = begin2;
while ((itr1 != end1) && (itr2 != end2))
{
if (*itr1 < *itr2)
*out = *itr1, ++itr1;
else
*out = *itr2, ++itr2;
++out;
}
while (itr1 != end1) *out++ = *itr1++;
while (itr2 != end2) *out++ = *itr2++;
}
int main()
{
std::vector<int> l1;
std::vector<int> l2;
std::vector<int> merged_list;
merge(l1.begin(),l1.end(),
l2.begin(),l2.end(),
std::back_inserter(merged_list));
return 0;
}
Quel est le message d'erreur? Mon compilateur ne se plaint pas, il compile le code très bien. – Oswald
Compile bien ici. (gcc 4.4.3) –
Pourquoi devrais-je lui donner un nom différent? Je n'utilise pas d'espace de noms std. –