1. template <class InputIterator, class T,                                           
  2.           class BinaryOperation1, class BinaryOperation2>                         
  3. T inner_product(InputIterator first1, InputIterator last1, InputIterator first2,  
  4.                 T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2) { 
  5.     for(; first1 != last1; ++first1, ++first2) {                                  
  6.         init = binary_op1(init, binary_op2(*first1, *first2));                    
  7.     }                                                                             
  8.     return init;