3 // { dg-options "-std=c++0x" }
6 static_assert( ! __is_final (A), "A not final" );
9 static_assert( __is_final (Af), "Af is final" );
12 static_assert( ! __is_final (B), "B not final" );
15 static_assert( __is_final (Bf), "Bf is final" );
17 struct C : private A, private B { };
18 static_assert( ! __is_final (C), "C not final" );
20 struct Cf final : private A, private B { };
21 static_assert( __is_final (Cf), "Cf is final" );
23 struct D { virtual ~D() final { } };
24 static_assert( ! __is_final (D), "D not final" );
26 struct Df final { virtual ~Df() final { } };
27 static_assert( __is_final (Df), "Df is final" );
29 template<typename> struct E { };
30 static_assert( ! __is_final (E<int>), "E<int> not final" );
31 static_assert( ! __is_final (E<Af>), "E<Af> not final" );
33 template<typename> struct Ef final { };
34 static_assert( __is_final (Ef<int>), "Ef<int> is final" );
35 static_assert( __is_final (Ef<A>), "Ef<A> is final" );
36 static_assert( __is_final (Ef<Af>), "Ef<Af> is final" );
38 template<typename> struct F { virtual ~F() final { }; };
39 static_assert( ! __is_final (F<int>), "F<int> not final" );
40 static_assert( ! __is_final (F<Af>), "F<Af> not final" );
42 template<typename> struct Ff final { virtual ~Ff() final { }; };
43 static_assert( __is_final (Ff<int>), "Ff<int> is final" );
44 static_assert( __is_final (Ff<A>), "Ff<A> is final" );
45 static_assert( __is_final (Ff<Af>), "Ff<Af> is final" );