chcę zrobić prostą rzecz:Jak używać lambda jako argumentu szablonu z wartością domyślną w C++?
void DoUntil(auto predicate = [] { return false; });
Oczywiście to nie zadziała - trzeba użyć argumentu szablonu:
template <typename P>
void DoUntil(P predicate = [] { return false; });
Ale stwierdzenie to nie działa albo - w Clang daje błąd:
error: no matching function for call to …
note: candidate template ignored: couldn't infer template argument 'P'
Jeśli robię wywołać funkcję bez argumentów, jakoś kompilator powiedzie wywnioskować typ z domyślnym argumentem:
int main() { DoUntil(); }
Nie chcę w żaden sposób używać std::function<>
.
Czy są jakieś inne możliwe rozwiązania mojego problemu?
To nie wydedukowany kontekst. Zapytano o [cppreference] (http: //en.cppreference.com/w/cpp/language/template_argument_deduction) nie wywnioskowany kontekst, Parametr szablonu używany w parametrze type parametru funkcji, który ma domyślny argument, który jest używany w wywołaniu, dla którego wykonywane jest odliczanie argumentów. – felix
Dlaczego nie chcesz użyć 'std :: function'? –