operador-> se repete até retornar um valor do tipo não classe

De acordo com13.3.1.2/8, ou melhornota de rodapé-129 (ênfase minha):

[...] O processo se repete até que um operador-> funcioneretorna um valor do tipo não classe.

Eu pensei que sabia comooperator-> funciona (deixe-me dizer, érecursivo com base no tipo de retorno), mas vejo que não tenho consciência de comona realidade funciona (quero dizer, étipo de retorno)

Quando o encontrei, me perguntei se alguém realmente pode definir e usar algo como umdouble operator->() para uma estrutura genéricaS, pois nunca usei esse operador dessa maneira.
Como exemplo, considere o código abaixo:

struct S { 
    constexpr double operator->() noexcept {
        return 3.14;
    }
};

int main() {
    static_assert(3.14 == S{}.operator->(), "!");
}

A sintaxe é bastante feia e não consigo ver nenhum uso de um operador desse tipo ou de outro semelhante.

Qual é o real objetivo de permitir que os programadores retornem umdouble ou umfloat deste operador?
Qual poderia ser um uso possível para eles?

questionAnswers(2)

yourAnswerToTheQuestion