18fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -fsyntax-only -verify %s 2fec52635SDouglas Gregor 3fec52635SDouglas Gregor namespace A { 4fec52635SDouglas Gregor int VA; FA()5fec52635SDouglas Gregor void FA() {} 6fec52635SDouglas Gregor struct SA { int V; }; 7fec52635SDouglas Gregor } 8fec52635SDouglas Gregor 9fec52635SDouglas Gregor using A::VA; 10fec52635SDouglas Gregor using A::FA; 11fec52635SDouglas Gregor using typename A::SA; 12fec52635SDouglas Gregor main()130bba2b61SDouglas Gregorint main() 14fec52635SDouglas Gregor { 15fec52635SDouglas Gregor VA = 1; 16fec52635SDouglas Gregor FA(); 17fec52635SDouglas Gregor SA x; //Still needs handling. 18fec52635SDouglas Gregor } 19fec52635SDouglas Gregor 20fec52635SDouglas Gregor struct B { fB21fec52635SDouglas Gregor void f(char){}; gB22fec52635SDouglas Gregor void g(char){}; 23fec52635SDouglas Gregor }; 24fec52635SDouglas Gregor struct D : B { 25fec52635SDouglas Gregor using B::f; 26fec52635SDouglas Gregor void f(int); 27fec52635SDouglas Gregor void g(int); 28fec52635SDouglas Gregor }; f(int)29fec52635SDouglas Gregorvoid D::f(int) { f('c'); } // calls B::f(char) g(int)30fec52635SDouglas Gregorvoid D::g(int) { g('c'); } // recursively calls D::g(int) 31fec52635SDouglas Gregor 32fec52635SDouglas Gregor namespace E { funcE(TYPE arg)33fec52635SDouglas Gregor template <typename TYPE> int funcE(TYPE arg) { return(arg); } 34fec52635SDouglas Gregor } 35fec52635SDouglas Gregor 360bba2b61SDouglas Gregor using E::funcE<int>; // expected-error{{using declaration cannot refer to a template specialization}} 37fec52635SDouglas Gregor 38fec52635SDouglas Gregor namespace F { 39fec52635SDouglas Gregor struct X; 40fec52635SDouglas Gregor } 41fec52635SDouglas Gregor 42fec52635SDouglas Gregor using F::X; 43fec52635SDouglas Gregor // Should have some errors here. Waiting for implementation. 44fec52635SDouglas Gregor void X(int); 45fec52635SDouglas Gregor struct X *x; 46031643efSKaelyn Uhrain 47031643efSKaelyn Uhrain 48031643efSKaelyn Uhrain namespace ShadowedTagNotes { 49031643efSKaelyn Uhrain 50031643efSKaelyn Uhrain namespace foo { 51031643efSKaelyn Uhrain class Bar {}; 52031643efSKaelyn Uhrain } 53031643efSKaelyn Uhrain 54*3fe3f857SKaelyn Uhrain void Bar(int); // expected-note{{class 'Bar' is hidden by a non-type declaration of 'Bar' here}} 55031643efSKaelyn Uhrain using foo::Bar; 56031643efSKaelyn Uhrain ambiguity()57031643efSKaelyn Uhrainvoid ambiguity() { 58031643efSKaelyn Uhrain const Bar *x; // expected-error{{must use 'class' tag to refer to type 'Bar' in this scope}} 59031643efSKaelyn Uhrain } 60031643efSKaelyn Uhrain 61031643efSKaelyn Uhrain } // namespace ShadowedTagNotes 62