In section [locale.moneypunct.members], frac_digits() returns type "int". This implies that frac_digits() might return a negative value, but a negative value is nonsensical. It should return "unsigned".
Similarly, in section [locale.moneypunct.virtuals], do_frac_digits() should return "unsigned".