Si consideri il seguente codice:intesa modello argomento deduzione
#include <vector>
template <typename T>
using v_itt = typename std::vector<T>::iterator;
template <typename T>
void foo(v_itt<T>){ }
int main() {
typename std::vector<long>::iterator i = std::vector<long>().begin();
foo(i); //candidate template ignored: couldn't infer template argument 'T'
}
Cosa c'è di sbagliato con il codice? Ho pensato che lo T
avrebbe dovuto essere dedotto a long
. C'è un modo per risolverlo in qualche modo?
Buona soluzione: ancora meno prolisso. Grazie Paolo. –
Bel trucco, sì. Grazie. –
@MarcoA. Beh, non è molto elegante perché si basa solo sull'errore di compilazione che non fornisce alcun messaggio all'utente, ma è solo un altro modo di fare la stessa cosa :) –