https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92458
Bug ID: 92458 Summary: Constraints do not work with precompiled headers Product: gcc Version: 10.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Blocks: 67491 Target Milestone: --- // header, compile with g++ -std=gnu++2a -c template<typename T> concept C = sizeof(T) > 1; template<typename T> struct S { }; template<typename T> requires C<T> struct S<T> { }; template<typename T> requires (!C<T>) struct S<T> { }; // source file, compile with g++ -std=gnu++2a -c #include "h.h" S<int> s; If no precompiled header exists, this compiles OK. If h.h.gch has been produced by compiling the header with -std=gnu++2a -c then compiling the source file gives an error: h.cc:2:8: error: ambiguous template instantiation for 'struct S<int>' 2 | S<int> s; | ^ h.h:4:43: note: candidates are: 'template<class T> struct S<T> [with T = int]' 4 | template<typename T> requires (!C<T>) struct S<T> { }; | ^~~~ h.h:5:46: note: 'template<class T> struct S<T> [with T = int]' h.cc:2:8: error: aggregate 'S<int> s' has incomplete type and cannot be defined 2 | S<int> s; | ^ Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67491 [Bug 67491] [meta-bug] concepts issues