Code below fails to compile w. intel C++ (10.0.026) .. I get the message:
bug.cpp(15): internal error: assertion failed at: "shared/edgcpfe/templates.c", line 5146
_p = Pair(pObject, &Stub< T , METHOD >);
^
compilation aborted for bug.cpp (code 4)
Any ideas?
//----------------------------------------------------------------------
#include <iostream>
#include <utility>
template < typename A0 >
class ZSignal
{
typedef void (*StubCall)(void*, A0);
typedef typename std::pair< void*, StubCall > Pair;
public:
template < typename T, void (T::*METHOD)(A0) >
void Register(T* pObject)
{
_p = Pair(pObject, &Stub< T , METHOD >);
}
void operator()(A0 a0) const
{
_p.second(_p.first, a0);
}
private:
template < typename T, void (T::*METHOD)(A0) >
static void Stub(void* pObject, A0 a0)
{
T* p = static_cast< T* >(pObject);
(p->*METHOD)(a0);
}
Pair _p;
};
class ZMyClass
{
public:
void MyMethod(int i) { std::cout << "MyMethod got : " << i << std::endl; }
};
int main()
{
ZSignal<int> d;
ZMyClass myClass;
d.Register<ZMyClass,&ZMyClass::MyMethod>(&myClass);
d(12);
return 0;
}