constexpr pregunta, ¿por qué estos dos programas diferentes se ejecutan en una cantidad de tiempo tan diferente con g ++?

Estoy usando gcc 4.6.1 y obtengo un comportamiento interesante que implica llamar a unconstexpr función. Este programa funciona bien y de inmediato imprime12200160415121876738.

#include <iostream>

extern const unsigned long joe;

constexpr unsigned long fib(unsigned long int x)
{
   return (x <= 1) ? 1 : (fib(x - 1) + fib(x - 2));
}

const unsigned long joe = fib(92);

int main()
{
   ::std::cout << "Here I am!\n";
   ::std::cout << joe << '\n';
   return 0;
}

Este programa tarda una eternidad en ejecutarse y nunca tuve la paciencia para esperar a que imprima un valor:

#include <iostream>

constexpr unsigned long fib(unsigned long int x)
{
   return (x <= 1) ? 1 : (fib(x - 1) + fib(x - 2));
}

int main()
{
   ::std::cout << "Here I am!\n";
   ::std::cout << fib(92) << '\n';
   return 0;
}

¿Por qué hay una diferencia tan grande? ¿Estoy haciendo algo mal en el segundo programa?

Editar Estoy compilando esto cong++ -std=c++0x -O3 en una plataforma de 64 bits.

Respuestas a la pregunta(4)

Su respuesta a la pregunta