Mam następujący kod:Błąd kompilacji szablonu - standardowy czy nie?
template<int k>
void foo()
{
}
int main(int argc, char* argv[])
{
int k = 1000;
foo<k>();
return 0;
}
które nie kompiluje, ale jeśli Oświadczam k
jak const
, robi:
template<int k>
void foo()
{
}
int main(int argc, char* argv[])
{
const int k = 1000;
foo<k>();
return 0;
}
Teraz widzę logikę dlaczego w pierwszym przypadku nie kompiluje się, a w drugim robi, ale czy jest to określone przez standard?
Błąd Dostaję jest:
Error 1 error C2971: 'foo' : template parameter 'k' : 'k' : a local variable cannot be used as a non-type argument
co nie jest do końca jasne, ponieważ k
jest zmienna lokalna również w przypadku jest to const
... prawda?
Nie sprecyzowałeś, dlaczego "k" działa w jednym, ale nie w drugim, co stanowiło mięso tego pytania. – GManNickG
Zobacz sekcję I pogrubioną. Standard mówi, że wyrażenie musi być stałe. –
Ale powtarzam: nie rozumiesz, dlaczego 'k' jest użyteczny, czy nie. – GManNickG