#include <iostream>
using namespace std;

template<typename T> class SmartPtr
{
public:
	SmartPtr(T* data): member(data) {}
	operator T * () 
	{
		cout << "operator T* called" << endl;
		return member; 
	}
	T* member;
};

int main() {
	int x = 10;
	SmartPtr<int> pT = SmartPtr<int>(&x);
	static_cast<int*>(pT);
	return 0;
}