#include <chrono>
#include <iostream>
std::chrono::year_month_day last_friday_of_month(int y, unsigned m) {
using namespace std::chrono;
// Build year_month correctly
year_month ym{year{y}, month{m}};
// First day of next month: (ym + 1 month) / day{1}
year_month_day first_next = (ym + months{1}) / day{1};
// Last day of this month
sys_days last_day = sys_days{first_next} - days{1};
// Walk backward to Friday
while (weekday{last_day} != Friday) {
last_day -= days{1};
}
return year_month_day{last_day};
}
int main() {
auto d = last_friday_of_month(2026, 5);
std::cout << (int)d.year() << "-"
<< (unsigned)d.month() << "-"
<< (unsigned)d.day() << "\n";
d = last_friday_of_month(2026, 6);
std::cout << (int)d.year() << "-"
<< (unsigned)d.month() << "-"
<< (unsigned)d.day() << "\n";
}
/*
run:
2026-5-29
2026-6-26
*/