xref: /llvm-project/clang/test/CXX/class.derived/class.virtual/p6.cpp (revision 67c608a9695496cfc9d3fdf9d0b12b554ac6b4df)
1*67c608a9SSaar Raz // RUN:  %clang_cc1 -std=c++2a -verify %s
2b65b1f32SSaar Raz 
3b65b1f32SSaar Raz template<typename T>
4b65b1f32SSaar Raz class A {
5b65b1f32SSaar Raz   virtual void f1() requires (sizeof(T) == 0);
6b65b1f32SSaar Raz   // expected-error@-1{{virtual function cannot have a requires clause}}
7b65b1f32SSaar Raz   virtual void f2() requires (sizeof(T) == 1);
8b65b1f32SSaar Raz   // expected-error@-1{{virtual function cannot have a requires clause}}
9b65b1f32SSaar Raz };
10b65b1f32SSaar Raz 
11b65b1f32SSaar Raz template<typename T>
12b65b1f32SSaar Raz class B : A<T> {
f1()13b65b1f32SSaar Raz   virtual void f1() requires (sizeof(T) == 0) override {}
14b65b1f32SSaar Raz   // expected-error@-1{{virtual function cannot have a requires clause}}
15b65b1f32SSaar Raz };
16b65b1f32SSaar Raz 
17b65b1f32SSaar Raz template<typename T> struct C : T {void f() requires true; };
18b65b1f32SSaar Raz // expected-error@-1{{virtual function cannot have a requires clause}}
19b65b1f32SSaar Raz struct D { virtual void f(); };
20b65b1f32SSaar Raz template struct C<D>;
21b65b1f32SSaar Raz // expected-note@-1{{in instantiation of template class 'C<D>' requested here}}