aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override1.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override1.C')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override1.C60
1 files changed, 60 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override1.C
new file mode 100644
index 0000000..e05693f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/override1.C
@@ -0,0 +1,60 @@
+// { dg-do compile { target c++11 } }
+struct B
+{
+ virtual void f() final {}
+ virtual void g() {}
+ virtual void x() const {}
+};
+
+struct B2
+{
+ virtual void h() {}
+};
+
+struct D : B
+{
+ virtual void g() override final {} // { dg-error "overriding" }
+};
+
+template <class T> struct D2 : T
+{
+ void h() override {} // { dg-error "marked override, but does not override" }
+};
+
+template <class T> struct D3 : T
+{
+ void h() override {}
+};
+
+struct D4 : D
+{
+ void g() {} // { dg-error "virtual function" }
+};
+
+struct B3
+{
+ virtual void f() final final {} // { dg-error "duplicate virt-specifier" }
+};
+
+struct B4
+{
+ void f() final {} // { dg-error "marked final, but is not virtual" }
+};
+
+struct D5 : B
+{
+ void ff() override {} // { dg-error "marked override, but does not override" }
+ virtual void fff() override {} // { dg-error "marked override, but does not override" }
+ virtual void x() override {} // { dg-error "marked override, but does not override" }
+ void g() override;
+};
+
+void D5::g() override {} // { dg-error "not allowed outside a class definition" }
+void g() override {} // { dg-error "not allowed outside a class definition" }
+
+int main()
+{
+ D2<B> d;
+ D2<B2> d2;
+ D3<B2> d3;
+}