Conversões definidas pelo usuário em C ++

Recentemente, eu estava navegando na minha cópia dea referência de bolso do C ++ da O'Reilly Media, e fiquei surpreso quando me deparei com uma breve seção e exemplo sobre a conversão definida pelo usuário para tipos definidos pelo usuário:

#include <iostream>

class account {

    private:
        double balance;

    public:
        account (double b) { balance = b; }

        operator double (void) { return balance; }
};

int main (void) {

    account acc(100.0);
    double balance = acc;

    std::cout << balance << std::endl;

    return 0;
}

Venho programando em C ++ há algum tempo, e é a primeira vez que vejo esse tipo de sobrecarga de operador. A descrição deste livro sobre o assunto é um tanto breve, deixando-me algumas perguntas não respondidas sobre esse recurso:

Esse é um recurso particularmente obscuro? Como eu disse, estou programando em C ++ há algum tempo e esta é a primeira vez que me deparei com isso. Não tive muita sorte em encontrar material mais aprofundado sobre isso.Isso é relativamente portátil? (Estou compilando no GCC 4.1)

Podem ser feitas conversões definidas pelo usuário para tipos definidos pelo usuário? por exemplo.

operador std :: string () {/ * code * /}

questionAnswers(4)

yourAnswerToTheQuestion