S should be a POD type (see section 5.1.2). A conventional binary multiplication operator, *, must be defined to multiply objects of type T with objects of type U. The assignment operator += must be defined on objects of type S. This operator must be able to accept an RHS operand of type S, and must also be able to accept an operand produced by multiplying together T and U (if this is has type different to S). The symbol 0 must be convertible to type S, yielding a unit of the addition operation.
All standard arithmetic types of C++ satisfy these requirements, provided the product of a T with a U is convertible to an S.