Rebase.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / override1.C
blobf5f00ee9f51b84cd956ded6dc213d9aeaa06c4b6
1 // { dg-do compile { target c++11 } }
2 struct B
4   virtual void f() final {}
5   virtual void g() {}
6   virtual void x() const {}
7 };
9 struct B2
11   virtual void h() {}
14 struct D : B
16   virtual void g() override final {} // { dg-error "overriding" }
19 template <class T> struct D2 : T
21   void h() override {} // { dg-error "marked 'override', but does not override" }
24 template <class T> struct D3 : T
26   void h() override {}
29 struct D4 : D
31   void g() {} // { dg-error "virtual function" }
34 struct B3
36   virtual void f() final final {} // { dg-error "duplicate virt-specifier" }
39 struct B4
41   void f() final {} // { dg-error "marked 'final', but is not virtual" }
44 struct D5 : B
46   void ff() override {} // { dg-error "marked 'override', but does not override" }
47   virtual void fff() override {} // { dg-error "marked 'override', but does not override" }
48   virtual void x() override {} // { dg-error "marked 'override', but does not override" }
49   void g() override;
52 void D5::g() override {} // { dg-error "not allowed outside a class definition" }
53 void g() override {} // { dg-error "not allowed outside a class definition" }
55 int main()
57   D2<B> d;
58   D2<B2> d2;
59   D3<B2> d3;