https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79591
Bug ID: 79591
Summary: [concepts] failure to distinguish overloads from
different namespaces with differing constraints
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: Casey at Carter dot net
Target Milestone: ---
Created attachment 40772
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40772&action=edit
Minimal repro
GCC 6.3 and trunk both miscompile this program:
template <class> concept bool True = true;
// Fine.
namespace X {
void f(auto) {}
void f(True) {}
}
void f(auto) {}
namespace Y {
void f(True) {}
using ::f;
// error: 'template<class auto:3> void f(auto:3)' conflicts with a previous
declaration
}
The compiler is happy to overload when the two abbreviated function templates
are declared in the same scope - as in namespace X - but not when one is
imported into the namespace via a using declaration.