| // { dg-do assemble } |
| // GROUPS passed ARM-compliance |
| #include <iostream> |
| enum f1 { |
| F1 |
| }; |
| |
| enum f2 { |
| F2 |
| }; |
| |
| class A { |
| public: |
| void set (f1 f); |
| }; |
| void A::set (f1 f) { std::cout << "called A f1\n";} |
| |
| class B : public A { |
| public: |
| void set (f2 f); |
| }; |
| void B::set (f2 f) { std::cout << "called B\n";} // { dg-error "" } candidate |
| |
| int main() { |
| B b; |
| b.set(F1); // ARM page 309: should call A.set(f1) and that what g++ does,// { dg-error "" } .* |
| // but 13.1 of ARM clearly states that it should call B::set() |
| // or generate an error because overloading works only for |
| // functions within the same scope (first page of chapter 13) |
| // while member of derived and base classes are considered to |
| // belong to different scopes. Thus B::set() should have |
| // hidden (completely) the A::set() function. |
| } |
| |
| |
| |
| |
| |