Home | History | Annotate | Download | only in Parser
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 namespace A {
      4     int VA;
      5     void FA() {}
      6     struct SA { int V; };
      7 }
      8 
      9 using A::VA;
     10 using A::FA;
     11 using typename A::SA;
     12 
     13 int main()
     14 {
     15     VA = 1;
     16     FA();
     17     SA x;   //Still needs handling.
     18 }
     19 
     20 struct B {
     21     void f(char){};
     22     void g(char){};
     23 };
     24 struct D : B {
     25     using B::f;
     26     void f(int);
     27     void g(int);
     28 };
     29 void D::f(int) { f('c'); } // calls B::f(char)
     30 void D::g(int) { g('c'); } // recursively calls D::g(int)
     31 
     32 namespace E {
     33     template <typename TYPE> int funcE(TYPE arg) { return(arg); }
     34 }
     35 
     36 using E::funcE<int>; // expected-error{{using declaration cannot refer to a template specialization}}
     37 
     38 namespace F {
     39     struct X;
     40 }
     41 
     42 using F::X;
     43 // Should have some errors here.  Waiting for implementation.
     44 void X(int);
     45 struct X *x;
     46 
     47 
     48 namespace ShadowedTagNotes {
     49 
     50 namespace foo {
     51   class Bar {};
     52 }
     53 
     54 void Bar(int); // expected-note{{class 'Bar' is hidden by a non-type declaration of 'Bar' here}}
     55 using foo::Bar;
     56 
     57 void ambiguity() {
     58    const Bar *x; // expected-error{{must use 'class' tag to refer to type 'Bar' in this scope}}
     59 }
     60 
     61 } // namespace ShadowedTagNotes
     62