[Bug c++/37093] New: [4.2/4.3/4.4 Regression] ICE with pointer to member template parameters

jakub at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Tue Aug 12 11:50:00 GMT 2008


template <class C, void (C::*M) ()>
static void foo (void *obj)
{
  C *p = static_cast<C*> (obj);
  (p->*M) ();
}

template <class C>
static void bar (C *c, void (C::*m) ())
{
  foo<C, m> ((void *) c);
}

struct S
{
  void baz () {}
};

int
main ()
{
  S a;
  bar (&a, &S::baz);
}

ICEs since 4.0 (in 3.4 and before before it gave
rh458297.C: In function `void bar(C*, void (C::*)()) [with C = S]':
rh458297.C:23:   instantiated from here
rh458297.C:11: error: `m' is not a valid template argument
rh458297.C:11: error: it must be a pointer-to-member of the form `&X::Y'
rh458297.C:11: error: no matching function for call to `foo(void*)'
).


-- 
           Summary: [4.2/4.3/4.4 Regression] ICE with pointer to member
                    template parameters
           Product: gcc
           Version: 4.3.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jakub at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37093



More information about the Gcc-bugs mailing list