У меня есть следующий код:
template<int k>
void foo()
{
}
int main(int argc, char* argv[])
{
int k = 1000;
foo<k>();
return 0;
}
, который не компилируется, но если я объявляю k
как const
, он делает:
template<int k>
void foo()
{
}
int main(int argc, char* argv[])
{
const int k = 1000;
foo<k>();
return 0;
}
Теперь я вижу логику, почему в первом случае он не компилируется, а во втором - компилируется, но это определено стандартом?
Ошибка, которую я получаю:
Error 1 error C2971: 'foo' : template parameter 'k' : 'k' : a local variable cannot be used as a non-type argument
, что не совсем понятно, поскольку k
является локальной переменной также в том случае, если const
... верно?