[Clang][Sema] Implement proposed resolution for CWG2847 (#80899)
Per the approved resolution for CWG2847, [temp.expl.spec] p8 will state: > An explicit specialization shall not have a trailing _requires-clause_ unless it declares a function template. We already implement this _partially_ insofar that a diagnostic is issued upon instantiation of `A<int>` in the following example: ``` template<typename> struct A { template<typename> void f(); template<> void f<int>() requires true; // error: non-templated function cannot have a requires clause }; template struct A<int>; // note: in instantiation of template class 'A<int>' requested here ``` This patch adds a bespoke diagnostic for such declarations, and moves the point of diagnosis for non-templated functions with trailing requires-clauses from `CheckFunctionDeclaration` to `ActOnFunctionDeclarator` (there is no point in diagnosing this during instantiation since we already have all the necessary information when parsing the declaration).
Loading
Please sign in to comment