Vinculación temporal a una referencia de valor

Tengo el siguiente código

string three()
{
    return "three";
}

void mutate(string& ref)
{
}

int main()
{
    mutate(three()); 
    return 0;
}

Puedes ver que estoy pasandoTres() amudar método. Este código compila bien. Según tengo entendido, los temporales no pueden asignarse a referencias no constantes. Si es así, ¿cómo se está compilando este programa?

¿Alguna idea?

Editar:

Compiladores intentaron: VS 2008 y VS2010 Beta

Respuestas a la pregunta(5)

Su respuesta a la pregunta