Проблема в том, что выражение &integers[0]
возвращает rvalue , которое нельзя привязать к неконстантным ссылочным параметрам average
шаблонной функции.
Таким образом, решение состоит в том, чтобы сделать параметры не ссылочными (удалено &
):
template<class IteratorT>
auto average(IteratorT begin, IteratorT end) -> decltype(*begin)
Тогда назовите это как (хотя это не так важно, но &integers[8]
, кажется, вызывает неопределенное поведение, педантично говоря):
auto average = sigma::average(integers, integers + 8);
Но зачем вам такой шаблон функции для начала? Вы можете использовать std::accumulate
как:
#include <algorithm> //must include this
auto average = std::accumulate(integers, integers + 8, 0)/8;