Schwanzrekursion findet nicht statt
Ich benutzeg++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
in einem C ++ - Projekt. Ich habe eine Funktion geschrieben, die das macht:
template<typename T, T (*funct)(int) >
multiset<T> Foo(const multiset<T>& bar, int iterations) {
if (iterations == 0) return bar;
multiset<T> copy_bar(bar);
T baz = funct(copy_bar.size());
if (baz.attr > 0)
return Foo<T,funct>(copy_bar, 100);
else
return Foo<T,funct>(bar, iterations - 1);
}
ch bekambad_alloc() exception
also habe ich die funktion mit @ getestgdb
und es stellt sich heraus, dass keine Schwanzrekursion stattfindet, was ich erwartet hatte, da es nach dem @ keine Anweisungen gireturn
s.
HINWEI: Ich habe es mit -O2 versucht, aber es hat nicht funktioniert