constexpr pergunta, por que esses dois programas diferentes são executados em uma quantidade tão diferente de tempo com o g +

Estou usando o gcc 4.6.1 e estou tendo um comportamento interessante envolvendo chamar umconstexpr função. Este programa funciona muito bem e imediatamente 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 leva uma eternidade para ser executado e nunca tive a paciência de esperar para imprimir um 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 que existe uma diferença tão grande? Estou fazendo algo errado no segundo programa?

Editar Estou compilando isso comg++ -std=c++0x -O3 em uma plataforma de 64 bits.