Je ne comprends pas la raison pour laquelle un paquet de paramètres doit se trouver à la fin de la liste de paramètres si cette dernière est liée à une classe, alors que la contrainte est relâchée si la liste de paramètres fait partie de la déclaration d'une méthode membre.
En d'autres termes, celui-ci compile :
class C {
template<typename T, typename... Args, typename S>
void fn() { }
};
La suivante ne l'est pas :
template<typename T, typename... Args, typename S>
class C { };
Pourquoi le premier cas est-il considéré comme juste et le second non ?
Je veux dire, si c'est une syntaxe légale, ne devrait-elle pas l'être dans les deux cas ?
Pour être clair, le vrai problème est que je définissais une classe similaire à la suivante :
template<typename T, typename... Args, typename Allocator>
class C { };
Avoir le type allocateur comme dernier type serait apprécié, mais je peux contourner cela d'une manière ou d'une autre (de toute façon, si vous avez une suggestion, elle est appréciée, peut-être que les vôtres sont beaucoup plus élégantes que les miennes !)
Cela dit, j'ai eu l'erreur :
Le paquet de paramètres 'Args' doit se trouver à la fin de la liste des paramètres du modèle.
J'étais donc curieux de bien comprendre pourquoi il est accepté dans certains cas, mais pas dans d'autres.
Ici est une question similaire, mais elle explique simplement comment résoudre le problème et c'était assez clair pour moi.