62 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1 -fsyntax-only -verify %s
 | 
						|
 | 
						|
namespace A {
 | 
						|
    int VA;
 | 
						|
    void FA() {}
 | 
						|
    struct SA { int V; };
 | 
						|
}
 | 
						|
 | 
						|
using A::VA;
 | 
						|
using A::FA;
 | 
						|
using typename A::SA;
 | 
						|
 | 
						|
int main()
 | 
						|
{
 | 
						|
    VA = 1;
 | 
						|
    FA();
 | 
						|
    SA x;   //Still needs handling.
 | 
						|
}
 | 
						|
 | 
						|
struct B {
 | 
						|
    void f(char){};
 | 
						|
    void g(char){};
 | 
						|
};
 | 
						|
struct D : B {
 | 
						|
    using B::f;
 | 
						|
    void f(int);
 | 
						|
    void g(int);
 | 
						|
};
 | 
						|
void D::f(int) { f('c'); } // calls B::f(char)
 | 
						|
void D::g(int) { g('c'); } // recursively calls D::g(int)
 | 
						|
 | 
						|
namespace E {
 | 
						|
    template <typename TYPE> int funcE(TYPE arg) { return(arg); }
 | 
						|
}
 | 
						|
 | 
						|
using E::funcE<int>; // expected-error{{using declaration cannot refer to a template specialization}}
 | 
						|
 | 
						|
namespace F {
 | 
						|
    struct X;
 | 
						|
}
 | 
						|
 | 
						|
using F::X;
 | 
						|
// Should have some errors here.  Waiting for implementation.
 | 
						|
void X(int);
 | 
						|
struct X *x;
 | 
						|
 | 
						|
 | 
						|
namespace ShadowedTagNotes {
 | 
						|
 | 
						|
namespace foo {
 | 
						|
  class Bar {};
 | 
						|
}
 | 
						|
 | 
						|
void Bar(int); // expected-note{{class 'Bar' is hidden by a non-type declaration of 'Bar' here}}
 | 
						|
using foo::Bar;
 | 
						|
 | 
						|
void ambiguity() {
 | 
						|
   const Bar *x; // expected-error{{must use 'class' tag to refer to type 'Bar' in this scope}}
 | 
						|
}
 | 
						|
 | 
						|
} // namespace ShadowedTagNotes
 |