What issue is the order and type of the arguments giving you?
Code:
#include <numeric>
#include <vector>
#include <cassert>
#include <functional>
int main()
{
using namespace std;
vector<int> v{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
auto thisWorks = [](double curr, int item) { return item - curr; };
auto notThis = [](int item, double curr) { return item - curr; };
using namespace std::placeholders;
auto butThisWorks = bind(notThis, _2, _1);
double result1 = accumulate(v.rbegin(), v.rend(), 5.0, thisWorks);
double result2 = accumulate(v.rbegin(), v.rend(), 5.0, notThis);
double result3 = accumulate(v.rbegin(), v.rend(), 5.0, butThisWorks);
assert(result1 == 0);
assert(result2 == -50.0);
assert(result3 == 0);
}