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 oreturns.

NOTA: Tentei com o sinalizador de compilação -O2, mas não funcionou

questionAnswers(3)

yourAnswerToTheQuestion