La recursión de la cola no ocurre

Estoy usandog++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2 en un proyecto C ++. Escribí una función que hace esto:

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);    
}

Yo estaba consiguiendobad_alloc() exception así que probé la función congdb y resulta que no está ocurriendo una recursión de cola, lo que esperaba ya que no hay declaraciones después delreturns.

NOTA: Intenté con el indicador de compilación -O2 pero no funcionó

Respuestas a la pregunta(3)

Su respuesta a la pregunta