No se puede compilar el siguiente fragmento de código. El error parece ser algún tipo de llamada ambigua a la rutina de combinación. Según tengo entendido, STL tiene una rutina de fusión que se encuentra en el espacio de nombres estándar, pero por lo que puedo decir, la combinación de nombres en el siguiente código debe ser única.Error del compilador de C++ ambiguo
Si cambio el nombre de fusión a xmerge, todo funciona. ¿Cuál podría ser el problema? ¿De dónde viene el nombre del choque?
#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;
}
¿Cuál es el mensaje de error? Mi compilador no se queja, compila el código muy bien. – Oswald
Compila bien aquí. (gcc 4.4.3) –
¿Por qué debería darle un nombre diferente? No estoy usando el espacio de nombres estándar. –