Предположим, что у меня есть классы Date и классы Year, Month и Day.
struct Date {
  Date(Year year, Month month, Day day) : d(day), m(month), y(year) {};
  Date(Month month, Day day, Year year) : d(day), m(month), y(year) {};
  Date(Day day, Month month, Year year) : d(day), m(month), y(year) {};
  Date(Day day, Year year, Month month) : d(day), m(month), y(year) {};
  ...
  ...
  private:
    Day d;
    Month m;
    Year y;
}
Это позволяет мне не иметь определенного расположения аргументов для Date, так как у меня много перегрузок.
Можно ли автоматически сгенерировать все перестановки/перегрузки?
Просто, чтобы быть ясным:
- Перестановки - это только макет аргумента, ничего о них не должно измените, поскольку я знаю, что автоматизировать невозможно.
 - Все сгенерированные перегрузки должны иметь тот же код, что и только макет аргументов изменяется не сама логика.