[Bug c++/38228] [4.2/4.3/4.4 regression] ICE with invalid use of bound member function

reichelt at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Sun Dec 28 23:45:00 GMT 2008



------- Comment #3 from reichelt at gcc dot gnu dot org  2008-12-28 23:43 -------
Simpler testcase:

===============================
struct A
{
  template<typename T> A(T);
};

struct B
{
  void foo();
};

A a = B().*(&B::foo);
===============================

This is invalid use of a bound non-static member function.
You have to call the function: (B().*(&B::foo))()

This has nothing to do with C++0x.
The bug is related to PR26496 which fixed a similar case long ago.
The code ICEs since GCC 3.4.0 and was wrongly accepted before.


-- 

reichelt at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |reichelt at gcc dot gnu dot
                   |                            |org
           Keywords|                            |ice-on-invalid-code,
                   |                            |monitored
            Summary|[C++0x] ICE when abusing    |[4.2/4.3/4.4 regression] ICE
                   |std::function               |with invalid use of bound
                   |                            |member function
   Target Milestone|---                         |4.2.5


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



More information about the Gcc-bugs mailing list