Rozważmy następujący kod:Zrozumienie szablon odliczenie argumentem
#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'
}
Co jest nie tak z kodem? Myślałem, że T
należy wydedukować na long
. Czy jest jakiś sposób, aby to naprawić?
Dobre rozwiązanie: jeszcze mniej gadatliwe. Dzięki, Paolo. –
Dobra sztuczka, tak. Dziękuję Ci. –
@MarcoA. Cóż, nie jest to zbyt eleganckie, ponieważ polega tylko na awarii czasu kompilacji, nie dostarczając użytkownikowi żadnych wiadomości, ale jest to po prostu inny sposób robienia tego samego :) –