// PR c++/51365 // { dg-do compile { target c++11 } } struct A { }; static_assert( ! __is_final (A), "A not final" ); struct Af final { }; static_assert( __is_final (Af), "Af is final" ); class B { }; static_assert( ! __is_final (B), "B not final" ); class Bf final { }; static_assert( __is_final (Bf), "Bf is final" ); struct C : private A, private B { }; static_assert( ! __is_final (C), "C not final" ); struct Cf final : private A, private B { }; static_assert( __is_final (Cf), "Cf is final" ); struct D { virtual ~D() final { } }; static_assert( ! __is_final (D), "D not final" ); struct Df final { virtual ~Df() final { } }; static_assert( __is_final (Df), "Df is final" ); template struct E { }; static_assert( ! __is_final (E), "E not final" ); static_assert( ! __is_final (E), "E not final" ); template struct Ef final { }; static_assert( __is_final (Ef), "Ef is final" ); static_assert( __is_final (Ef), "Ef is final" ); static_assert( __is_final (Ef), "Ef is final" ); template struct F { virtual ~F() final { }; }; static_assert( ! __is_final (F), "F not final" ); static_assert( ! __is_final (F), "F not final" ); template struct Ff final { virtual ~Ff() final { }; }; static_assert( __is_final (Ff), "Ff is final" ); static_assert( __is_final (Ff), "Ff is final" ); static_assert( __is_final (Ff), "Ff is final" );