tengo el siguiente código:Error de compilación de plantilla: estándar o no?
template<int k>
void foo()
{
}
int main(int argc, char* argv[])
{
int k = 1000;
foo<k>();
return 0;
}
cuales no se compila, pero si declaro como k
const
, que hace:
template<int k>
void foo()
{
}
int main(int argc, char* argv[])
{
const int k = 1000;
foo<k>();
return 0;
}
Ahora, veo la lógica detrás de por qué en el primer caso no compila y en el segundo sí, ¿pero esto es especificado por el estándar?
El error que estoy recibiendo es:
Error 1 error C2971: 'foo' : template parameter 'k' : 'k' : a local variable cannot be used as a non-type argument
que no es del todo claro, ya que k
es una variable local también en el caso de que sea const
... ¿verdad?
No especificó por qué 'k' funciona en uno pero no en el otro, que fue la base de la pregunta. – GManNickG
Ver la sección en negrita. El estándar dice que la expresión debe ser constante. –
Pero me repito a mí mismo: no abordas por qué 'k' es utilizable o no. – GManNickG