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

Reply via email to