Проблема заключается в прототипе вашей функции:
template <class Ran, class T> T dumb(Ran begin, Ran end)
При использовании template
s, тип возврата, который является зависимым типом (здесь T
), не может быть выведен неявно .
Таким образом, ваша измененная функция должна выглядеть следующим образом:
template <class T, class Ran>
// ^^^^^ 'T' is coming before 'Ran'
T dumb(Ran begin, Ran end)
{
return *begin;
}
и она должна называться
int d = dumb<int>(myVector.begin(), myVector.end());
^^^^
Итак, мы сделали 2 изменения:
- Тип, который должен быть явно упомянут (т. Е.
T=int
), поступает 1-м - Вызывая
dumb<>
с явным упоминанием int
, так что возвращаемый типявляется вычитаемым
[Примечание. Это решение очень универсально для вашего понимания.Как упоминалось в ответе @ Bjorn, для vector<>
тип может быть выведен автоматически с помощью ::value_type
.]