libstdc++: Use on_month_day istream operator in ZoneInfo parsing.
libstdc++'s ZoneInfo parsing now uses the `on_month_day` istream operator for more flexible date parsing.
This commit modifies ZoneInfo parsing in libstdc++ to directly use the operator>> for on_month_day, removing the on_day tag. The operator>>(istream&, on_month_day) is updated to handle cases where the month component is missing and to set failbit accordingly. This change enables parsing month, day, and time in a single operation. The code also handles failures when parsing the day number N for Www>=N or Www<=N productions, leaving the day part of the input unchanged and setting failbit.
In Details
This commit refactors the ZoneInfo parsing logic in src/c++20/tzdb.cc. It removes on_month_day::on_day_t and on_month_day::on_day and inlines operator>>(istream&, on_month_day::day_t&). The change modifies operator>>(istream&, on_month_day) to avoid modifying on.month if MONTH is not present and reports failure when parsing the day for LessEq/GreaterEq. This simplifies the parsing logic and improves error handling.
For Context
The ZoneInfo class in libstdc++ represents time zone information, and parsing this information from a data source involves reading and interpreting date and time values. This commit improves the parsing logic for dates within ZoneInfo data by using a dedicated operator for parsing month and day combinations, making the code more robust and easier to maintain. istream operators are used to read formatted input from a stream.