| // { dg-do compile } |
| |
| struct A |
| { |
| int i; |
| }; |
| |
| struct B |
| { |
| int i; |
| }; |
| |
| struct C : A, B |
| { |
| using A::i; // { dg-message "previous" } |
| using B::i; // { dg-error "redeclaration" } |
| }; |
| |
| struct E |
| { |
| typedef int type; |
| }; |
| |
| struct F |
| { |
| typedef int type; |
| }; |
| |
| struct G : E, F |
| { |
| using E::type; // { dg-message "previous" } |
| using F::type; // { dg-error "redeclaration" } |
| }; |
| |
| struct H |
| { |
| typedef int type; |
| }; |
| |
| struct I : H |
| { |
| typedef int type; // { dg-message "previous" } |
| using H::type; // { dg-error "conflicts" } |
| }; |
| |
| struct I2 : H |
| { |
| using H::type; // { dg-message "previous" } |
| typedef int type; // { dg-error "conflicts" } |
| }; |
| |
| struct J |
| { |
| struct type {}; |
| }; |
| |
| struct K : J |
| { |
| struct type {}; // { dg-message "previous" } |
| using J::type; // { dg-error "conflicts" } |
| }; |
| |
| struct L : J |
| { |
| using J::type; // { dg-message "previous" } |
| struct type {}; // { dg-error "conflicts" } |
| }; |
| |
| struct M |
| { |
| typedef int type; |
| struct type2 {}; |
| }; |
| |
| struct N : M |
| { |
| using M::type; // { dg-message "previous" } |
| using M::type; // { dg-error "redeclaration" } |
| using M::type2; // { dg-message "previous" } |
| using M::type2; // { dg-error "redeclaration" } |
| }; |