mi código de problema:C++ sobrecarga: cadena literal vs. impulso :: función de ambigüedad
#include <string>
#include <boost/function.hpp>
void func (const std::string&) {}
void func (const boost::function<void()>&) {}
int main() {
func (main); // good
func ("bad");
return 0;
}
=>
error: call of overloaded ‘func(const char [4])’ is ambiguous
overload.cpp:4: note: candidates are: void func(const std::string&)
overload.cpp:5: note: void func(const boost::function<void()()>&)
Sé que podría resolver este llamando explícitamente func (cadena ("malo ")); o proporcionando un func (const char *), pero me pregunto si hay una manera de mantener el lado de la persona que llama como en el ejemplo y sin introducir más sobrecargas.
Quizás algo con boost :: enable_if? Gracias por cualquier pista.
¿De verdad crees que la causa es la sobrecarga que tiene 'boost :: function', ¿has intentado por ejemplo compilar sin esa sobrecarga? ¿Eso funcionará? – Nim
sí, es causado por la función boost ::. El ejemplo que publiqué reproduce toda la situación. – denis
sí - no hice la prueba antes de preguntar, simplemente un poco desconcertado de que este fuera el caso - parece que es ... mmm ... corto de proporcionar sobrecargas para todo, no estoy seguro de que haya una solución clara para esto ... – Nim