For a locale which specifies digit grouping, num_get::do_get will enforce
that the number read in contains the grouping character at the correct
locations. It does this even if the number read in didn't have any grouping
This is shown best with a code example:
int a = 0;
iss >> a;
std::cout << a << ", " << iss.fail() << std::endl;
Digit grouping is checked. That is, the positions of discarded separators is
examined for consistency with
use_facet<numpunct >(loc).grouping(). If they are not consistent then
ios_base::failbit is assigned to err.
which might have been meant to be != instead of >= in the new line.
At least, according to my compiler, __grouping.size() is unsigned, so >= 0 is invariably true. Should it have been != (or >), or did you mean to remove the now-tautological condition entirely?