#include <iostream>
template < typename T>
class ptr {
T* m_ptr;
public :
ptr( T* a_ptr) : m_ptr( a_ptr) { }
T& operator * ( ) const { return * m_ptr; } ;
} ;
template <>
class ptr< void > {
void * m_ptr;
public :
ptr( void * a_ptr) : m_ptr( a_ptr) { }
} ;
int main( )
{
int i = 12345 ;
ptr< int > ptr_i( & i) ;
std:: cout << * ptr_i; // OK
ptr< void > ptr_i2( & i) ;
std:: cout << * ptr_i2; // ERROR
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgcHRyIHsKCVQqIG1fcHRyOwogICAgcHVibGljOgoJCXB0cihUKiBhX3B0cikgOiBtX3B0cihhX3B0cikge30KICAgICAgICBUJiBvcGVyYXRvciAqICgpIGNvbnN0IHsgcmV0dXJuICptX3B0cjsgfTsKfTsKCnRlbXBsYXRlPD4KY2xhc3MgcHRyPHZvaWQ+IHsKCXZvaWQqIG1fcHRyOwogICAgcHVibGljOgoJCXB0cih2b2lkKiBhX3B0cikgOiBtX3B0cihhX3B0cikge30KfTsKCmludCBtYWluKCkKewoJaW50IGkgPSAxMjM0NTsKCXB0cjxpbnQ+IHB0cl9pKCZpKTsKCXN0ZDo6Y291dCA8PCAqcHRyX2k7IC8vIE9LCgoJcHRyPHZvaWQ+IHB0cl9pMigmaSk7CglzdGQ6OmNvdXQgPDwgKnB0cl9pMjsgLy8gRVJST1IKCQoJcmV0dXJuIDA7Cn0=