Вы вызываете itransformationFunction(idx, element)
(2 аргумента), тогда как ваша лямбда однажды ожидает один.
Измените вызов на что-то вроде:
transformWithIndex(source, [](int index, int &elem) { return index + 1; })
, и ваш result_of
должен быть также зафиксирован наinclude index:
template <typename Range, class TransformationFunction>
std::vector<typename std::result_of<TransformationFunction(std::size_t, typename Range::value_type)>::type>
transformWithIndex(const Range &iRange, const TransformationFunction &itransformationFunction) {
std::vector<typename std::result_of<TransformationFunction(std::size_t, typename Range::value_type)>::type> result;
int idx = 0;
for (auto &&element : iRange) {
result.push_back(itransformationFunction(idx, element));
idx++;
}
return result;
}
и std::decay_t
, вероятно, следует применять для обработки случаев, когда функтор возвращает ссылочные или константные объекты.