What's a sane way to throw errors? `assert()` or `std::cerr`?

Should I do something like:

     char *end;                                   // for  error check
     size_t groupDigits = strtol(Lang::MONEY_GROUP_NUM, &end, 10);
     if(*end)
       std::cerr << "conversion of cent to integer from MONEY_GROUP_NUM failed: " << end << std::endl;

or should I skip the whole `*end` catching, and just do `if(groupDigits < 0 || groupDigits > 10)`? Not sure what to write in the error message, if one should be provided at all. Using assert solves that.