#include <iostream>
using namespace std;
struct xyz
{
int x;
};
template <class s>
class sometemplateclass
{
public:
template <class t>
t* sometemplatememberfunc(void)
{
return (t*)(data);
}
void* data;
};
// ok on g++, ok on vc2005
void somenontemplateglobalfunc(const xyz& data)
{
sometemplateclass<xyz> v;
v.data = (void*)&(data.x);
int* result = v.sometemplatememberfunc<int>();
cout << "in somenontemplateglobalfunc()\n"
<< "data = " << *result << endl;
}
// error on g++, ok on vc2005
template <class s>
void sometemplateglobalfunc(const s& data)
{
sometemplateclass<s> v;
v.data = (void*)&(data.x);
int* result = v.sometemplatememberfunc<int>();
cout << "in sometemplateglobalfunc()\n"
<< "data = " << *result << endl;
}
int main()
{
cout << "begin..." << endl;
xyz x;
x.x = 666;
somenontemplateglobalfunc(x); // ok on g++, ok on vc2005
sometemplateglobalfunc(x); // error on g++, ok on vc2005
cout << "end..." << endl;
return 0;
}