1 // PR c++/51365
2 // { dg-do compile { target c++11 } }
3 
4 struct A { };
5 static_assert( ! __is_final (A), "A not final" );
6 
7 struct Af final { };
8 static_assert( __is_final (Af), "Af is final" );
9 
10 class B { };
11 static_assert( ! __is_final (B), "B not final" );
12 
13 class Bf final { };
14 static_assert( __is_final (Bf), "Bf is final" );
15 
16 struct C : private A, private B { };
17 static_assert( ! __is_final (C), "C not final" );
18 
19 struct Cf final : private A, private B { };
20 static_assert( __is_final (Cf), "Cf is final" );
21 
~DD22 struct D { virtual ~D() final { } };
23 static_assert( ! __is_final (D), "D not final" );
24 
~Dffinal25 struct Df final { virtual ~Df() final { } };
26 static_assert( __is_final (Df), "Df is final" );
27 
28 template<typename> struct E { };
29 static_assert( ! __is_final (E<int>), "E<int> not final" );
30 static_assert( ! __is_final (E<Af>),  "E<Af> not final" );
31 
32 template<typename> struct Ef final { };
33 static_assert( __is_final (Ef<int>), "Ef<int> is final" );
34 static_assert( __is_final (Ef<A>),   "Ef<A> is final" );
35 static_assert( __is_final (Ef<Af>),  "Ef<Af> is final" );
36 
~FF37 template<typename> struct F { virtual ~F() final { }; };
38 static_assert( ! __is_final (F<int>), "F<int> not final" );
39 static_assert( ! __is_final (F<Af>),  "F<Af> not final" );
40 
~Fffinal41 template<typename> struct Ff final { virtual ~Ff() final { }; };
42 static_assert( __is_final (Ff<int>), "Ff<int> is final" );
43 static_assert( __is_final (Ff<A>),   "Ff<A> is final" );
44 static_assert( __is_final (Ff<Af>),  "Ff<Af> is final" );
45 
46