#include <iostream>
using namespace std;

class Ptr {
public:
	Ptr( int * p ) : m_ptr( p ) {}
    operator bool() const {
    	std::cout << "bool" << std::endl;
    	return m_ptr != 0;
    }
    explicit operator int*() {
    	std::cout << "pointer" << std::endl;
    	return m_ptr;
    }
private:
	int * m_ptr;
};


int main() {

	Ptr p( 0 );
	if ( p ) {
		int * t = static_cast<int*>(p);
	}

	return 0;
}