De acuerdo con mi compilador gcc-4.6, la llamada a func en el ejemplo siguiente es ambigua.Llamada ambigua (conversión de char * a lambda vs std :: cadena)
void func(const std::string &str) {
}
void func(std::function<std::string()> f) {
}
void test() {
func("Hello");
}
es el compilador correcto al decir esto? Si elimino la primera sobrecarga, este código no se compilará, ya que no creará una instancia de las plantillas involucradas.
¿Hay alguna forma de resolver esto al renombrar una de las dos funciones o al convertir explícitamente a std :: string?
¡Eso parece ridículo! –
@Tomalak: Lo es. – Puppy
Ni siquiera estoy seguro de si las implementaciones pueden hacer esto. Me alegraría que alguien pudiera encontrar una referencia de especificación o explicar más. –