1 // RUN: %clang_cc1 -ast-print -std=c++14 %s | FileCheck %s
11 void operator += (int);
16 static void staticMember();
20 operator ns::Wrapper();
21 // CHECK: operator ns::Wrapper()
25 Wrapper::Inner::Inner() { }
26 // CHECK: Wrapper::Inner::Inner()
28 void Wrapper::Inner::operator +=(int) { }
29 // CHECK: void Wrapper::Inner::operator+=(int)
33 ns::Wrapper::Inner::Inner(int) { }
34 // CHECK: ns::Wrapper::Inner::Inner(int)
36 ns::Wrapper::Inner::~Inner() { }
37 // CHECK: ns::Wrapper::Inner::~Inner()
40 void ::ns::Wrapper::Inner::member() { }
41 // CHECK: template <typename T> void ::ns::Wrapper::Inner::member()
43 ns::Wrapper::Inner::operator int() { return 0; }
44 // CHECK: ns::Wrapper::Inner::operator int()
46 ns::Wrapper::Inner::operator ::ns::Wrapper() { return ns::Wrapper(); }
47 // CHECK: ns::Wrapper::Inner::operator ::ns::Wrapper()
51 void Wrapper::Inner::staticMember() { }
52 // CHECK: void Wrapper::Inner::staticMember()
56 template<int x
, typename T
>
57 class TemplateRecord
{
59 template<typename U
> void functionTemplate(T
, U
);
62 template<int x
, typename T
>
63 void TemplateRecord
<x
, T
>::function() { }
64 // CHECK: template <int x, typename T> void TemplateRecord<x, T>::function()
66 template<int x
, typename T
>
68 void TemplateRecord
<x
, T
>::functionTemplate(T
, U
) { }
69 // CHECK: template <int x, typename T> template <typename U> void TemplateRecord<x, T>::functionTemplate(T, U)
72 class TemplateRecord
<0, int> {
74 template<typename U
> void functionTemplate(int, U
);
77 void TemplateRecord
<0, int>::function() { }
78 // CHECK: void TemplateRecord<0, int>::function()
81 void TemplateRecord
<0, int>::functionTemplate(int, U
) { }
82 // CHECK: template <typename U> void TemplateRecord<0, int>::functionTemplate(int, U)
85 struct OuterTemplateRecord
{
94 void OuterTemplateRecord
<T
>::Inner
<U
>::function() { }
95 // CHECK: template <typename T> template <typename U> void OuterTemplateRecord<T>::Inner<U>::function()