typedef int INT_TYPEDEF; template<class T> class TypedIfc { public: virtual ~TypedIfc() { } virtual operator const T&() const = 0; virtual const T& operator= (const T& t) = 0; }; template<class Tnative> class NullIfc : public TypedIfc<Tnative> { public: const Tnative& operator= (const Tnative& t) { return t; } operator const Tnative&() const { return *(Tnative *)0; } }; typedef TypedIfc<INT_TYPEDEF> INT_TYPEDEFIfc; NullIfc<int> i32;