llvm-project/clang/test/PCH/cxx1y-local-templates.cpp

59 lines
1.1 KiB
C++

// RUN: %clang_cc1 -pedantic-errors -std=c++1y -emit-pch %s -o %t-cxx1y
// RUN: %clang_cc1 -ast-print -pedantic-errors -std=c++1y -include-pch %t-cxx1y %s | FileCheck -check-prefix=CHECK-PRINT %s
#ifndef HEADER_INCLUDED
#define HEADER_INCLUDED
auto nested_local_call_all() {
struct Inner1 {
auto inner1_foo(char c) {
struct Inner2 {
template<class T> T inner2_foo(T t) {
return t;
}
};
return Inner2{};
}
};
return Inner1{}.inner1_foo('a').inner2_foo(4);
}
auto nested_local() {
struct Inner1 {
auto inner1_foo(char c) {
struct Inner2 {
template<class T> T inner2_foo(T t) {
return t;
}
};
return Inner2{};
}
};
return Inner1{};
}
int test() {
auto A = nested_local_call_all();
auto B = nested_local();
auto C = B.inner1_foo('a');
C.inner2_foo(3.14);
}
#else
// CHECK-PRINT: int nested_local_call_all
// CHECK-PRINT: nested_local
auto nested_local_call_all();
int test(int y) {
return nested_local_call_all();
}
#endif