https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111705
Bug ID: 111705 Summary: [14 Regression] use of concepted copy constructored struct inside a template function messes up Product: gcc Version: 14.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Take: ``` template<class> concept c = true; template<class T> struct ts { template<class T1> requires(c<T1>) ts(const ts<T1>&); template<class T1> requires(!c<T1>) ts(const ts<T1>&) = delete; ts() = default; }; using P = ts<int>; void (*f)(P); template<class> void f1() { P x; f(x); } ``` This gets rejected with the following (bogus) error message: ``` <source>: In substitution of 'template<class T1> requires !(c<T1>) ts<int>::ts(const ts<T1>&) [with T1 = int]': <source>:21:5: required from here 21 | f(x); | ^ <source>:10:3: required by the constraints of 'template<class T> template<class T1> requires !(c<T1>) ts<T>::ts(const ts<T1>&)' <source>:9:12: error: satisfaction value of atomic constraint '!(c<T1>) [with T1 = int]' changed from '<expression error>' to 'false' 9 | requires(!c<T1>) | ~^~~~~~~ <source>:21:5: note: satisfaction value first evaluated to '<expression error>' from here 21 | f(x); | ^ ``` This was reduced from PR 111703 (but is different since this was accepted before in GCC 13)