Я не понимаю причину, по которой пакет параметров должен находиться в конце списка параметров, если последний привязан к классу, тогда как ограничение ослабляется, если список параметров является частью объявления метода-члена.
Другими словами, этот компилируется:
class C {
template<typename T, typename... Args, typename S>
void fn() { }
};
Следующий:
template<typename T, typename... Args, typename S>
class C { };
Почему первый случай считается правильным, а второй - нет?
Я имею в виду, если это юридический синтаксис, разве это не должно быть в обоих случаях?
Чтобы быть ясным, реальная проблема заключается в том, что я определял класс, аналогичный следующему:
template<typename T, typename... Args, typename Allocator>
class C { };
Если тип распределителя как последний тип будет оценен, но я могу как-то обойти его (во всяком случае, если у вас есть предложение, которое оно ценит, возможно, ваше гораздо более элегантное, чем мое!).
Тем не менее, я получил сообщение об ошибке:
пакет параметров "Args" должен быть в конце списка параметров шаблона
Итак, мне было просто интересно узнать, почему в некоторых случаях оно принимается, но это не в некоторых других.