Home | History | Annotate | Download | only in class
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11
      2 namespace Test1 {
      3 
      4 class A final { }; // expected-note {{'A' declared here}}
      5 class B : A { }; // expected-error {{base 'A' is marked 'final'}}
      6 
      7 }
      8 
      9 namespace Test2 {
     10 
     11 template<typename T> struct A final { }; // expected-note 2 {{'A' declared here}}
     12 struct B : A<int> { }; // expected-error {{base 'A' is marked 'final'}}
     13 
     14 template<typename T> struct C : A<T> { }; // expected-error {{base 'A' is marked 'final'}}
     15 struct D : C<int> { }; // expected-note {{in instantiation of template class 'Test2::C<int>' requested here}}
     16 
     17 }
     18 
     19 namespace Test3 {
     20 
     21 template<typename T> struct A { };
     22 template<> struct A<int> final { }; // expected-note {{'A' declared here}}
     23 
     24 struct B : A<bool> { };
     25 struct C : A<int> { }; // expected-error {{base 'A' is marked 'final'}}
     26 
     27 }
     28 
     29 namespace Test4 {
     30 
     31 struct A final { virtual void func() = 0; }; // expected-warning {{abstract class is marked 'final'}} expected-note {{unimplemented pure virtual method 'func' in 'A'}}
     32 struct B { virtual void func() = 0; }; // expected-note {{unimplemented pure virtual method 'func' in 'C'}}
     33 
     34 struct C final : B { }; // expected-warning {{abstract class is marked 'final'}}
     35 
     36 }
     37