これについても、C++になったからといってとくに変わりませんので、基本は元ネタと同じようにすればOKです。ただし、若干そのままではうまくいかないところがありますので、その部分だけはケアしてあげることにしましょう。また、せっかくですのでconstexprを付けて定数式を得られるようにしましょう。

元ネタではデバッグ用のコードや引数のエラーチェックが多数入っていました。それはそれでいいんですが、全体の見通しがききにくくなるので、思い切って全部削除して最低限のコードだけを残しました。また、内部で呼び出しているnth_day_of_week_to_day関数は10.3 ○月のN回目のW曜日は何日?で作成したものです。C言語ではint型から列挙型へは暗黙に変換できますが、C++では明示的に型変換する必要がありますので、上記ではキャストを行っています。


元ネタ

↑ 10. 日付・グレゴリオ暦計算テンプレート