1 // RUN: clang-change-namespace -old_namespace "na::nb" -new_namespace "x::y" --file_pattern ".*" %s -- -std=c++11 | sed 's,// CHECK.*,,' | FileCheck %s
2
3 template <class T>
4 class function;
5 template <class R, class... ArgTypes>
6 class function<R(ArgTypes...)> {
7 public:
8 template <typename Functor>
function(Functor f)9 function(Functor f) {}
operator ()(ArgTypes...) const10 R operator()(ArgTypes...) const {}
11 };
12
13 namespace x {
14 // CHECK: namespace x {
15 class X {};
16 }
17
18 namespace na {
19 namespace nb {
20 // CHECK: namespace x {
21 // CHECK-NEXT: namespace y {
f(function<void (int)> func,int param)22 void f(function<void(int)> func, int param) { func(param); }
__anonae7d723a0102(int x) 23 void g() { f([](int x) {}, 1); }
24
25 // x::X in function type parameter list will have translation unit context, so
26 // we simply replace it with fully-qualified name.
27 using TX = function<x::X(x::X)>;
28 // CHECK: using TX = function<X(x::X)>;
29
30 class A {};
31 using TA = function<A(A)>;
32 // CHECK: using TA = function<A(A)>;
33
34 // CHECK: } // namespace y
35 // CHECK-NEXT: } // namespace x
36 }
37 }
38