forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -ast-print -std=c++14 %s | FileCheck %s
 | |
| 
 | |
| namespace ns {
 | |
| 
 | |
| struct Wrapper {
 | |
| class Inner {
 | |
|   Inner();
 | |
|   Inner(int);
 | |
|   ~Inner();
 | |
| 
 | |
|   void operator += (int);
 | |
| 
 | |
|   template<typename T>
 | |
|   void member();
 | |
| 
 | |
|   static void staticMember();
 | |
| 
 | |
|   operator int();
 | |
| 
 | |
|   operator ns::Wrapper();
 | |
|   // CHECK: operator ns::Wrapper()
 | |
| };
 | |
| };
 | |
| 
 | |
| Wrapper::Inner::Inner() { }
 | |
| // CHECK: Wrapper::Inner::Inner()
 | |
| 
 | |
| void Wrapper::Inner::operator +=(int) { }
 | |
| // CHECK: void Wrapper::Inner::operator+=(int)
 | |
| 
 | |
| }
 | |
| 
 | |
| ns::Wrapper::Inner::Inner(int) { }
 | |
| // CHECK: ns::Wrapper::Inner::Inner(int)
 | |
| 
 | |
| ns::Wrapper::Inner::~Inner() { }
 | |
| // CHECK: ns::Wrapper::Inner::~Inner()
 | |
| 
 | |
| template<typename T>
 | |
| void ::ns::Wrapper::Inner::member() { }
 | |
| // CHECK: template <typename T> void ::ns::Wrapper::Inner::member()
 | |
| 
 | |
| ns::Wrapper::Inner::operator int() { return 0; }
 | |
| // CHECK: ns::Wrapper::Inner::operator int()
 | |
| 
 | |
| ns::Wrapper::Inner::operator ::ns::Wrapper() { return ns::Wrapper(); }
 | |
| // CHECK: ns::Wrapper::Inner::operator ::ns::Wrapper()
 | |
| 
 | |
| namespace ns {
 | |
| 
 | |
| void Wrapper::Inner::staticMember() { }
 | |
| // CHECK: void Wrapper::Inner::staticMember()
 | |
| 
 | |
| }
 | |
| 
 | |
| template<int x, typename T>
 | |
| class TemplateRecord {
 | |
|   void function();
 | |
|   template<typename U> void functionTemplate(T, U);
 | |
| };
 | |
| 
 | |
| template<int x, typename T>
 | |
| void TemplateRecord<x, T>::function() { }
 | |
| // CHECK: template <int x, typename T> void TemplateRecord<x, T>::function()
 | |
| 
 | |
| template<int x, typename T>
 | |
| template<typename U>
 | |
| void TemplateRecord<x, T>::functionTemplate(T, U) { }
 | |
| // CHECK: template <int x, typename T> template <typename U> void TemplateRecord<x, T>::functionTemplate(T, U)
 | |
| 
 | |
| template<>
 | |
| class TemplateRecord<0, int> {
 | |
|   void function();
 | |
|   template<typename U> void functionTemplate(int, U);
 | |
| };
 | |
| 
 | |
| void TemplateRecord<0, int>::function() { }
 | |
| // CHECK: void TemplateRecord<0, int>::function()
 | |
| 
 | |
| template<typename U>
 | |
| void TemplateRecord<0, int>::functionTemplate(int, U) { }
 | |
| // CHECK: template <typename U> void TemplateRecord<0, int>::functionTemplate(int, U)
 | |
| 
 | |
| template<typename T>
 | |
| struct OuterTemplateRecord {
 | |
|   template<typename U>
 | |
|   struct Inner {
 | |
|     void function();
 | |
|   };
 | |
| };
 | |
| 
 | |
| template<typename T>
 | |
| template<typename U>
 | |
| void OuterTemplateRecord<T>::Inner<U>::function() { }
 | |
| // CHECK: template <typename T> template <typename U> void OuterTemplateRecord<T>::Inner<U>::function()
 |