Perché non è possibile dedurre F
per proxy()
?Impossibile dedurre argomento modello che è una funzione
Dovrebbe essere possibile perché lo sto restringendo, solo per le funzioni che restituiscono uno int
.
#include <utility>
#include <iostream>
#include <type_traits>
using namespace std;
int foo(int bar) {
cout << "int" << endl;
return 2;
}
float foo(float bar) {
cout << "float" << endl;
return 1;
}
template <typename F, typename... Args>
typename enable_if<
is_same<
typename result_of<F(Args...)>::type,
int
>::value,
typename result_of<F(Args...)>::type
>::type
proxy(F func, Args&&... args) {
return func(forward<Args>(args)...);
}
int main() {
proxy(foo, 5);
}
Ecco l'errore:
b.cpp:29:17: error: no matching function for call to 'proxy(<unresolved overloaded function type>, int)'
b.cpp:24:1: note: template argument deduction/substitution failed:
b.cpp:29:17: note: couldn't deduce template parameter 'F'
Come ci sono due overload della funzione ... compilatore non può dedurre il valore sulla base di un futuro (successivo) parametro di una funzione ...'proxy (static_cast (foo), 5);' farebbe il trucco qui –