#include struct VIStream { virtual void Input(int& i){} }; template struct TVIStream : VIStream { T& m_t; TVIStream(T& t) : m_t(t) {} virtual void Input(int& i){m_t >> i;} }; class Test { int i; public: void Input(VIStream& v){v.Input(i);} }; template T& operator>>(T& t,Test& a) { TVIStream v(t); a.Input(v); return t; } int main() { Test t; cin >> t; return 0; }