A recursão da cauda não está acontecendo
estou a usarg++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
em um projeto C ++. Eu escrevi uma função que meio que faz isso:
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);
}
eu estava conseguindobad_alloc() exception
então eu testei a função comgdb
e acontece que não há recursão na cauda, o que eu esperava, pois não há declarações após oreturn
s.
NOTA: Tentei com o sinalizador de compilação -O2, mas não funcionou