function-template-specialization.cpp revision 1fd2dd145d9bcdf0b8d60a88e1795b6ae83656f5
1// RUN: clang-cc -emit-llvm %s -o %t &&
2template<typename T, typename U>
3T* next(T* ptr, const U& diff);
4
5template<typename T, typename U>
6T* next(T* ptr, const U& diff) {
7  return ptr + diff;
8}
9
10void test(int *iptr, float *fptr, int diff) {
11  // FIXME: should be "_Z4nextIiiEPT_S1_RKT0_"
12  // RUN: grep "_Z4nextIiiEPiPiRKi" %t &&
13  iptr = next(iptr, diff);
14  // FIXME: should be "_Z4nextIfiEPT_S1_RKT0_"
15  // RUN: grep "_Z4nextIfiEPfPfRKi" %t &&
16  fptr = next(fptr, diff);
17}
18
19template<typename T, typename U>
20T* next(T* ptr, const U& diff);
21
22void test2(int *iptr, double *dptr, int diff) {
23  iptr = next(iptr, diff);
24  // FIXME: should be "_Z4nextIdiEPT_S1_RKT0_"
25  // RUN: grep "_Z4nextIdiEPdPdRKi" %t
26  dptr = next(dptr, diff);
27}