y = x * x;
y = x.Square( );
template<class T> T someNttlFunction( T x, T y ) { nttlTraits<T> trts; .... z = trts.Square( x ); }
template< class T > class nttlTraits { public: T Random( size_t digits ); T RandomMod( T m ); T Square( const T& x ); short Mod4( const T& x ); short Mod8( const T& x ); bool IsOdd( const T &x ); bool IsEven( const T &x ); T Abs( const T &X ); T Power( T X, T e ); T Power( T X, T e, const T &m ); size_t DecimalDigits( const T& x ); short ToShort( const T& X ); long ToLong( const T& X ); unsigned short ToUnsignedShort( const T& X ); unsigned long ToUnsignedLong( const T& X ); };