| // Testcase from [namespace.udecl] updated by P1787 |
| |
| namespace A { |
| int x; |
| int f(int); |
| int g; |
| void h(); |
| } |
| |
| namespace B { |
| int i; |
| struct g { }; |
| struct x { }; |
| void f(int); |
| void f(double); |
| void g(char); // OK: hides struct g |
| } |
| |
| void func() { |
| int i; |
| using B::i; // { dg-error "" } i conflicts |
| void f(char); |
| using B::f; // OK: each f is a function |
| using A::f; // OK, but interferes with B::f(int) |
| f(1); // { dg-error "" } ambiguous |
| static_cast<int(*)(int)>(f)(1); // OK: calls A::f |
| f(3.5); // calls B::f(double) |
| using B::g; |
| g('a'); // calls B::g(char) |
| struct g g1; // g1 has class type B::g |
| using A::g; // { dg-error "" } conflicts with B::g |
| void h(); |
| using A::h; // { dg-error "" } conflicts |
| using B::x; |
| using A::x; // OK: hides struct B::x |
| x = 99; // assigns to A::x |
| struct x x1; // x1 has class type B::x |
| } |