[PATCH] D43357: [Concepts] Function trailing requires clauses
Saar Raz via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 7 13:40:19 PDT 2018
saar.raz added inline comments.
================
Comment at: lib/Sema/SemaDecl.cpp:8377-8381
+ } else if (D.hasTrailingRequiresClause()) {
+ // C++2a [class.virtual]p6
+ // A virtual method shall not have a requires-clause.
+ Diag(NewFD->getTrailingRequiresClause()->getLocStart(),
+ diag::err_constrained_virtual_method);
----------------
rsmith wrote:
> This is the wrong place for this check. We don't yet know whether the function is virtual here in general. A function can become virtual due to template instantiation:
>
> ```
> template<typename T> struct A : T { void f() requires true; };
> struct B { virtual void f(); };
> template struct A<B>; // error, A<B>::f is constrained and virtual
> ```
>
> This is perhaps a wording defect: it's not clear that `A::f()` really should override `B::f()`, but that is the consequence of the current rules. I've posted a question to the core reflector.
I don't really see why A::f() should override B::f() indeed - since it is not marked virtual nor override, shouldn't it just hide B::f()? or am I missing something here?
Repository:
rC Clang
https://reviews.llvm.org/D43357
More information about the cfe-commits
mailing list