Secondo il mio compilatore gcc-4.6 la chiamata a func nell'esempio seguente è ambiguo.ambiguo chiamata (conversione da char * a lambda vs std :: string)
void func(const std::string &str) {
}
void func(std::function<std::string()> f) {
}
void test() {
func("Hello");
}
Il compilatore è corretto nel dire questo? Se rimuovo il primo overload di questo codice non viene compilato in quanto sarà in grado di istanziare i modelli coinvolti.
Esiste un modo per risolvere questo accanto o rinominare una delle due funzioni o esplicitamente la conversione a std :: string?
Che sembra ridicolo! –
@Tomalak: lo è. – Puppy
Non sono nemmeno sicuro se le implementazioni sono autorizzati a farlo. Sarei felice se qualcuno potesse trovare un riferimento alle specifiche o spiegare ulteriormente. –