Bonjour,

Je cherche à coupler l'utilisation de la bibliothèque rational de Boost au type d'entier à précision arbitraire qu'implémente la bibliothèque GMP.

J'ai vu que Boost à un binding particulier pour rendre les types de GMP et MPFR compatibles avec les bibliothèques de Boost (voir using Boost with MPFR/GMP).

Néanmoins, l'ECM suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
#include <boost/math/bindings/mpfr.hpp>
#include <boost/rational.hpp>
 
typedef boost::rational<mpz_class> rat;
 
int main(void) {
  rat r;
 
  return 0;
}
produit :
$ g++ try.cpp -lgmp -lmpfr -lgmpfrxx -lm
In file included from try.cpp:2:0:
/usr/include/boost/rational.hpp: In instantiation of ‘boost::rational<__gmp_expr<__mpz_struct [1], __mpz_struct [1]> >’:
try.cpp:7:7: instantiated from here
/usr/include/boost/rational.hpp:127:1: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’
Ce que je comprends comme le fait que Boost me tape sur les doigts car je n'utilise pas rational comme il faut. Donc que le type mpz_class (ou mpfr_class qui me donne la même erreur) ne satisfait pas les pré-requis du type abstrait de l'implémentation de boost::rational.
Si c'est cela, le binding (premier include) n'est-il pas censé y pourvoir ?

En vous remerciant.