Usos de um cabeçalho de promoção aritmética em C ++

Venho brincando com um conjunto de modelos para determinar o tipo de promoção correto, considerando dois tipos primitivos em C ++. A idéia é que, se você definir um modelo numérico personalizado, poderá usá-los para determinar o tipo de retorno, digamos, da função operador + com base na classe passada para os modelos. Por exemplo:

// Custom numeric class
template <class T>
struct Complex {
    Complex(T real, T imag) : r(real), i(imag) {}
    T r, i;
// Other implementation stuff
};

// Generic arithmetic promotion template
template <class T, class U>
struct ArithmeticPromotion {
    typedef typename X type;  // I realize this is incorrect, but the point is it would
                              // figure out what X would be via trait testing, etc
};

// Specialization of arithmetic promotion template
template <>
class ArithmeticPromotion<long long, unsigned long> {
    typedef typename unsigned long long type;
}

// Arithmetic promotion template actually being used
template <class T, class U>
Complex<typename ArithmeticPromotion<T, U>::type>
operator+ (Complex<T>& lhs, Complex<U>& rhs) {
    return Complex<typename ArithmeticPromotion<T, U>::type>(lhs.r + rhs.r, lhs.i + rhs.i);
}

Se você usar esses modelos de promoção, poderá tratar mais ou menos seus tipos definidos pelo usuário como se fossem primitivos, com as mesmas regras de promoção aplicadas a eles. Então, acho que a pergunta que tenho é: isso seria algo que poderia ser útil? E, se sim, que tipos de tarefas comuns você gostaria que fossem modeladas para facilitar o uso? Estou trabalhando no pressuposto de que apenas ter apenas os modelos de promoção seria insuficiente para adoção prática.

Aliás, o Boost tem algo semelhante no cabeçalho de matemática / ferramentas / promoção, mas é realmente mais para obter valores prontos para serem passados para as funções matemáticas C padrão (que esperam 2 ints ou 2 duplos) e ignora todos os tipos integrais. É algo tão simples preferível a ter controle completo sobre como seus objetos estão sendo convertidos?

TL; DR: Quais tipos de modelos auxiliares você esperaria encontrar em um cabeçalho aritmético de promoção além do mecanismo que faz a própria promoção?

questionAnswers(2)

yourAnswerToTheQuestion