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}}