1// { dg-do assemble  }
2
3template <class InputIterator, class BinaryOperation>
4void accumulate(InputIterator first,
5    	         BinaryOperation binary_op) {
6}
7
8
9template<class R> int p( int val, R& r )
10{
11   return val + r;
12}
13
14template<class R> void f(R)
15{
16   accumulate(0, static_cast<int (*)(int, R&)>(p) );
17}
18
19int main()
20{
21   f(0);
22}
23