Ошибка компиляции шаблона - стандартная или нет?

У меня есть следующий код:

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 ... верно?

5
задан Luchian Grigore 22 November 2011 в 19:18
поделиться