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

Antworten auf die Frage(6)

Ihre Antwort auf die Frage