// RUN: %clang_cc1 -pedantic-errors -std=c++11 -emit-pch %s -o %t-cxx11 | |
// RUN: %clang_cc1 -ast-print -pedantic-errors -std=c++11 -include-pch %t-cxx11 %s | FileCheck -check-prefix=CHECK-PRINT %s | |
#ifndef HEADER_INCLUDED | |
#define HEADER_INCLUDED | |
int nontemplate_test(double d) { | |
struct Local { | |
template<class T> T foo(T t) { | |
return t; | |
} | |
}; | |
return Local{}.foo(d); | |
} | |
template<class U> | |
U template_test(U d) { | |
struct Local { | |
template<class T> T foo(T t) { | |
return t; | |
} | |
}; | |
return Local{}.foo(d); | |
} | |
int nested_local() { | |
struct Inner1 { | |
int inner1_foo(char c) { | |
struct Inner2 { | |
template<class T> T inner2_foo(T t) { | |
return t; | |
} | |
}; | |
return Inner2{}.inner2_foo(3.14); | |
} | |
}; | |
return Inner1{}.inner1_foo('a'); | |
} | |
#else | |
// CHECK-PRINT: U template_test | |
// CHECK-PRINT: int nontemplate_test(double) | |
int nontemplate_test(double); | |
template double template_test(double); | |
int test2(int y) { | |
return nontemplate_test(y) + template_test(y); | |
} | |
#endif |