| // 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 |