56 lines
1.1 KiB
C++
56 lines
1.1 KiB
C++
|
// 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
|