La lecture de cette question m'a fait me demander: est-il une raison technique pour réfuter modèles de classe surcharges?
Par la surcharge, je veux dire d'avoir plusieurs modèles avec les mêmes noms, mais différents paramètres, par exemple
template <typename T>
struct Foo {};
template <typename T1, typename T2>
struct Foo {};
template <unsigned int N>
struct Foo {};
Le compilateur gère pour gérer les fonctions surchargées et les modèles de fonction, ne serait-il pas possible d'appliquer les mêmes techniques (par exemple, nom de mangling) pour les modèles de classe?
Au début, je pensais que peut-être que serait la cause d'une certaine ambiguïté des questions au moment de prendre le modèle de l'identificateur seul, mais la seule fois où cela peut notamment se produire lors du passage en tant que modèle argument de modèle, de sorte que le type du paramètre peut être utilisé pour choisir la surcharge:
template <template <typename> class T>
void A {};
template <template <unsigned int> class T>
void B {};
A<Foo> a; // resolves to Foo<T>
B<Foo> b; // resolves to Foo<N>
Pensez-vous que cette fonctionnalité pourrait être utile? Est-il un "bon" (c'est à dire technique) raisons pour lesquelles ce n'est pas possible dans le courant de C++?