https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96363
Bug ID: 96363 Summary: bogus error with constrained partial specialization Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: nathan at gcc dot gnu.org Target Milestone: --- template <typename T> class TPL; template <typename T> struct Trait; template <typename T> requires (Trait<T>::val == 0) class TPL<T>; // #1 template <typename T> requires (Trait<T>::val == 1) class TPL<T>; // #2 error here cc1plus -quiet -std=c++20 par.cc par.cc:11:7: error: ‘TPL<T>’ does not match original declaration 11 | class TPL<T>; | ^~~~~~ par.cc:1:29: note: original template declaration here 1 | template <typename T> class TPL; | ^~~ ICBW, but if #2 is rejected, why is #1 accepted. Aren't these just two partial specializations with different constraints?