Vous devez pouvoir modifier les arguments du modèle
template <std::string temp>
void f() {
// ...
}
f<"foo">();
f<"bar">(); // different function!?
Maintenant, un impl devrait proposer une séquence unique de caractères pour un std::string
ou, d'ailleurs, toute autre classe arbitraire définie par l'utilisateur, stockant une valeur particulière, dont la signification n'est pas connue de l'implémentation. De plus, la valeur des objets de classe arbitraires ne peut pas être calculée au moment de la compilation.
Il est prévu d'envisager d'autoriser les types de classe littéraux en tant que types de paramètres de modèle pour post-C ++ 0x, qui sont initialisés par des expressions constantes. Ceux-ci pourraient être mutilés en ayant les membres de données mutilés de manière récursive en fonction de leurs valeurs (pour les classes de base, par exemple, nous pouvons appliquer la profondeur d'abord, de gauche à droite). Mais cela ne fonctionnera certainement pas pour les classes arbitraires.