operator * ()

unsigned_int<> provides the multiplication operators * an *=.

Specialization's of operator * () calculates with, and returns the wider of the two types.

For operator *= () the calculation is done with the type of the left hand side, i.e. the right hand side is converted prior to doing the calculation.

unsigned_int< 128 > a( 10 ), c( 10 );
unsigned u  = 10;

a *= c;
u *= c;
CHECK( a == 100 );
CHECK( u == 100 );
CHECK( (c * c ) == 100 );
CHECK( (a * 10) == 1000 );
CHECK( (10 * a) == 1000 );

Test Result: gcc34 Passed, msvc80 Passed, msvc71 Passed

Output

Ok