http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57825
Bug ID: 57825 Summary: Template specialization for ref qualified member pointers Product: gcc Version: 4.8.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: tomaszkam at gmail dot com Created attachment 30460 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30460&action=edit Bugus code exmaple The class template specialization for member pointers that differs only on ref qualification issue double redefinition error. For example the compilation of following code: template<typename T> struct target_class {}; template<typename Class, typename Ret, typename... Args> struct target_class<Ret (Class::*)(Args...)> {}; template<typename Class, typename Ret, typename... Args> struct target_class<Ret (Class::*)(Args...) &> {}; template<typename Class, typename Ret, typename... Args> struct target_class<Ret (Class::*)(Args...) &&> {}; Will result in the following buggy errors: template_ref_bug.cpp:10:8: error: redefinition of ‘struct target_class<Ret (Class::*)(Args ...)>’ struct target_class<Ret (Class::*)(Args...) &> ^ template_ref_bug.cpp:6:8: error: previous definition of ‘struct target_class<Ret (Class::*)(Args ...)>’ struct target_class<Ret (Class::*)(Args...)> ^ template_ref_bug.cpp:14:8: error: redefinition of ‘struct target_class<Ret (Class::*)(Args ...)>’ struct target_class<Ret (Class::*)(Args...) &&> ^ template_ref_bug.cpp:6:8: error: previous definition of ‘struct target_class<Ret (Class::*)(Args ...)>’ struct target_class<Ret (Class::*)(Args...)>