| /* PR c++/34059 */ |
| /* { dg-do compile } */ |
| |
| struct A |
| { |
| template<int> void foo(); |
| }; |
| struct B : A {}; |
| struct C : A {}; |
| |
| class AA |
| { |
| template<int> void foo(); /* { dg-message "private" } */ |
| }; |
| struct BB : AA {}; |
| |
| class AAA { |
| int get() const { return 0; } |
| }; |
| struct BBB { |
| static BBB *foo(); |
| private: |
| int get() const { return 1; } /* { dg-message "private" } */ |
| }; |
| template<bool> struct S { |
| S(unsigned int = BBB::foo()->AAA::get()); /* { dg-error "is not a base of" } */ |
| }; |
| template<bool> struct SS { |
| SS(unsigned int = BBB::foo()->get()); /* { dg-error "within this context" } */ |
| }; |
| |
| void bar() |
| { |
| B().C::foo<0>(); /* { dg-error "is not a member of" } */ |
| BB().AA::foo<0>(); /* { dg-error "within this context" } */ |
| |
| int i; |
| i.C::foo<0>(); /* { dg-error "which is of non-class type" } */ |
| |
| S<false> s; |
| SS<false> ss; |
| } |