https://gcc.gnu.org/bugzilla/show_bug.cgi?id=74744
Bug ID: 74744 Summary: Fails to select overridden function when determined by template parameter Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: xaxxon at gmail dot com Target Milestone: --- clang compiles https://godbolt.org/g/rUizCC, gcc doesn't: https://godbolt.org/g/d45fkS (problem seems to be around one having a *const* pointer) #include <functional> #include <vector> #include <string> #include <algorithm> using namespace std; #define TYPE char * const <== DOESN'T WORK //#define TYPE char const * <== WORKS class Foo { public: void func(int){} void func(TYPE){} }; template<class R, class T, class... Args> void gimme(R(T::*funky)(Args...)) { } int main() { gimme<void, Foo, TYPE>(&Foo::func); } The issue seems to be around a const pointer. Pointer to const doesn't have any issue. This has been a problem since 4.7.3 (according to compilers on gcc.godbolt.org)