Aqui un ejemplo que compila, usando la misma firma que dices que no compila.
Código C++:
Ver originalclass X
{
int& f() const
{
int* p = new int;
return *p;
}
};
Marcar un metodo const hace que el compilador haga const a todos los miembros, con ello puede generar errores de compilacion, cuando detecta inconsistencias entre la firma y lo que retornas, o la firma y lo que haces dentro del metodo. El problema esta en lo que haces, no en la firma. La firma es valida.
p.s.: El ejemplo es tambien un ejemplo de mal estilo. No lo haga usted en casa.