http://benji3up2kxewkqfcq7buxk2xd6zwy3zggnurkrm3l4cvwy2iipvyyad.onion/mirrors/gmpdoc/C_002b_002b-Interface-Internals.html
To perform an operation, say, addition, we first define a “function object”
evaluating it, struct __gmp_binary_plus
{
static void eval(mpf_t f, const mpf_t g, const mpf_t h)
{
mpf_add(f, g, h);
}
}; And an “additive expression” object, __gmp_expr<__gmp_binary_expr<mpf_class, mpf_class, __gmp_binary_plus> >
operator+(const mpf_class &f, const mpf_class &g)
{
return __gmp_expr
<__gmp_binary_expr<mpf_class, mpf_class, __gmp_binary_plus> >(f, g);
} The...