summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.law/arm9.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.law/arm9.C')
-rw-r--r--gcc/testsuite/g++.old-deja/g++.law/arm9.C39
1 files changed, 39 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm9.C b/gcc/testsuite/g++.old-deja/g++.law/arm9.C
new file mode 100644
index 000000000..979ef8088
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.law/arm9.C
@@ -0,0 +1,39 @@
+// { 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|no known conversion";} // { dg-message "B::set|no known conversion" }
+
+int main() {
+ B b;
+ b.set(F1); // ARM page 309: should call A.set(f1) and that what g++ does,// { dg-error "match" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 26 }
+ // 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.
+}
+
+
+
+
+