Według mojego kompilatora gcc-4.6 wywołanie func w poniższym przykładzie jest niejednoznaczne.Niejednoznaczne wywołanie (konwersja z char * do lambda vs std :: string)
void func(const std::string &str) {
}
void func(std::function<std::string()> f) {
}
void test() {
func("Hello");
}
Czy kompilator ma rację mówiąc to? Jeśli usuniemy pierwsze przeciążenie, ten kod się nie skompiluje, ponieważ nie będzie w stanie utworzyć odpowiednich szablonów.
Czy jest mimo to rozwiązanie tego problemu przy zmianie nazwy jednej z dwóch funkcji lub jawnej konwersji na std :: string?
To wydaje się śmieszne! –
@ Tomalak: Jest. – Puppy
Nie jestem nawet pewien, czy implementacje mogą to robić. Byłbym szczęśliwy, gdyby ktoś mógł znaleźć odniesienie do specyfikacji lub wyjaśnić dalej. –