Ho il seguente codice:Errore di compilazione del modello - standard o no?
template<int k>
void foo()
{
}
int main(int argc, char* argv[])
{
int k = 1000;
foo<k>();
return 0;
}
che non compilare, ma se io dichiaro k
come const
, lo fa:
template<int k>
void foo()
{
}
int main(int argc, char* argv[])
{
const int k = 1000;
foo<k>();
return 0;
}
Ora, vedo la logica dietro perché nel primo caso non si compila e nel secondo lo fa, ma è specificato dallo standard?
L'errore che sto ottenendo è:
Error 1 error C2971: 'foo' : template parameter 'k' : 'k' : a local variable cannot be used as a non-type argument
che non è esattamente chiaro, dal momento che k
è una variabile locale anche nel caso è const
... giusto?
Non hai specificato perché 'k' funziona in uno ma non nell'altro, che era la carne della domanda. – GManNickG
Vedere la sezione I in grassetto. Lo standard dice che l'espressione deve essere costante. –
Ma mi ripeto: non si affronta perché 'k' è utilizzabile o no. – GManNickG