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...)>