// RUN: clang-cc -emit-llvm %s -o %t &&
template<typename T, typename U>
T* next(T* ptr, const U& diff);

template<typename T, typename U>
T* next(T* ptr, const U& diff) { 
  return ptr + diff; 
}

void test(int *iptr, float *fptr, int diff) {
  // FIXME: should be "_Z4nextIiiEPT_S1_RKT0_"
  // RUN: grep "_Z4nextIiiEPiPiRKi" %t &&
  iptr = next(iptr, diff);
  // FIXME: should be "_Z4nextIfiEPT_S1_RKT0_"
  // RUN: grep "_Z4nextIfiEPfPfRKi" %t &&
  fptr = next(fptr, diff);
}

template<typename T, typename U>
T* next(T* ptr, const U& diff);

void test2(int *iptr, double *dptr, int diff) {
  iptr = next(iptr, diff);
  // FIXME: should be "_Z4nextIdiEPT_S1_RKT0_"
  // RUN: grep "_Z4nextIdiEPdPdRKi" %t
  dptr = next(dptr, diff);
}
