https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111748
Bug ID: 111748 Summary: GCC does not understand partial ordering between non-constrained and constrained templates for specialization Product: gcc Version: 13.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: jeanmichael.celerier at gmail dot com Target Milestone: --- Consider: #include<concepts> template<typename> void foo() { } template<std::integral> void foo() { } template<> void foo<bool>() { } int main() { foo<bool>(); } According to the answers I got in https://stackoverflow.com/questions/77261120/ GCC should be able to compile this code, yet it fails due to a supposed ambiguity between template<typename> void foo() { } and template<std::integral> void foo() { } as the base of foo<bool>