Tienes que ser capaz de destrozar argumentos de plantilla
template <std::string temp>
void f() {
// ...
}
f<"foo">();
f<"bar">(); // different function!?
Ahora un impl necesitaría para llegar a una secuencia de caracteres única s para un std::string
o, para el caso, cualquier otra clase arbitraria definida por el usuario, almacenando un valor particular, cuyo significado no es conocido por la implementación. Y, además, el valor de los objetos de clase arbitrarios no se puede calcular en tiempo de compilación.
Está previsto considerar permitir tipos de clase literales como tipos de parámetros de plantilla para post-C++ 0x, que se inicializan mediante expresiones constantes. Esos podrían ser mutilados si los miembros de los datos se mutilan recursivamente de acuerdo con sus valores (para las clases de base, por ejemplo, podemos aplicar cruce transversal de profundidad, de izquierda a derecha). Pero definitivamente no va a funcionar para clases arbitrarias.
Un parámetro de plantilla se resuelve en tiempo de compilación. –