Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / gcc / testsuite / g++.dg / cpp0x / override2.C
1 // { dg-do compile }
2 // { dg-options "--std=c++0x" }
3 struct B1 {};
4
5 struct B2 final {};
6
7 struct D1 : B1 {};
8
9 struct D2 : B2 {}; // { dg-error "cannot derive from 'final' base" }
10
11 template<class T> struct D3 : T {};
12
13 template<class T> struct D4 : T {}; // { dg-error "cannot derive from 'final' base" }
14
15 template <class T> struct B3 {};
16
17 template <class T> struct B4 final {};
18
19 template <class T> struct B5 final {};
20
21 struct undeclared<int> final { }; // { dg-error "not a class template" }
22
23 struct D5 : B3<D5> {};
24
25 struct D6 : B4<D6> {}; // { dg-error "cannot derive from 'final' base" }
26
27 struct B6 final final {}; // { dg-error "duplicate virt-specifier" }
28
29 struct B7 override {}; // { dg-error "cannot specify 'override' for a class" }
30
31 namespace N
32 {
33   struct C;
34 }
35
36 struct N::C final{};
37
38 int main()
39 {
40   D3<B1> d;
41   D4<B2> d2;
42   struct B2 final{}; // { dg-error "previous definition" }
43   B2 final; // { dg-error "has a previous declaration|previously declared here" }
44   B2 final2 = final;
45   struct B2 {}; // { dg-error "redefinition" }
46   struct B2 final; // { dg-error "redeclaration" }
47   struct B2 override; // { dg-error "previously declared here" }
48   struct B2 final {}; // { dg-error "redefinition" }
49   struct B2 override {}; // { dg-error "cannot specify 'override' for a class" }
50   B2 override{}; // { dg-error "redeclaration" }
51   struct foo final {}; // { dg-error "previous definition" }
52   struct foo final {}; // { dg-error "redefinition" }
53   foo final; // { dg-error "conflicting declaration" }
54 }