c++ namespaces compiler-errors ambiguous

Error del compilador C++ ambiguo



namespaces compiler-errors (1)

El compilador se confunde entre su función de merge y la std::merge definida en el algorithm . Use ::merge para eliminar esta ambigüedad. Esta llamada es ambigua ya que el compilador usa Argument Dependendent Lookup para buscar la función cuando se utiliza un nombre de función no calificado.

El siguiente bit de código no se puede compilar. 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.

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?

http://codepad.org/uAKciGy5

#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; }