Package: libgivaro-dev
Version: 3.2.13-1.2
Severity: serious
Tags: upstream

givaro's includes are causing errors for linbox when building with GCC 4.7
(Bug#667264) -- patch attached:

[...]
../../linbox/field/givaro-gfq.h:137:25:   required from here
/usr/include/givaro/givpoly1proot.inl:289:15: error: 'degree' was not declared 
in this scope, and no declarations were found by argument-dependent lookup at 
the point of instantiation [-fpermissive]
/usr/include/givaro/givpoly1proot.inl:289:15: note: declarations in dependent 
base 'Poly1Dom<GFqDom<int>, Dense>' are not found by unqualified lookup
/usr/include/givaro/givpoly1proot.inl:289:15: note: use 'this->degree' instead
[...]
../../linbox/ring/givaro-polynomial.h:164:68:   required from here
/usr/include/givaro/givpoly1factor.inl:168:16: error: 'degree' was not declared 
in this scope, and no declarations were found by argument-dependent lookup at 
the point of instantiation [-fpermissive]
/usr/include/givaro/givpoly1factor.inl:168:16: note: declarations in dependent 
base 'Poly1Dom<LinBox::Modular<double>, Dense>' are not found by unqualified 
lookup
/usr/include/givaro/givpoly1factor.inl:168:16: note: use 'this->degree' instead
[...]
../../linbox/field/givaro-gfq.h:100:75:   required from here
/usr/include/givaro/givintnumtheo.inl:405:5: error: 'isleq' was not declared in 
this scope, and no declarations were found by argument-dependent lookup at the 
point of instantiation [-fpermissive]
/usr/include/givaro/givintnumtheo.inl:405:5: note: declarations in dependent 
base 'IntegerDom' are not found by unqualified lookup
/usr/include/givaro/givintnumtheo.inl:405:5: note: use 'this->isleq' instead
[...]

Thanks,

Matej
--- givaro-3.2.13~/src/kernel/integer/givintnumtheo.inl
+++ givaro-3.2.13/src/kernel/integer/givintnumtheo.inl
@@ -17,8 +17,8 @@
 // =================================================================== //
 template<class RandIter>
 typename IntNumTheoDom<RandIter>::Rep& IntNumTheoDom<RandIter>::phi(Rep& res, 
const Rep& n) const {
-    if (isleq(n,1)) return res=n;
-    if (isleq(n,3)) return sub(res,n,this->one);
+    if (this->isleq(n,1)) return res=n;
+    if (this->isleq(n,3)) return this->sub(res,n,this->one);
     std::list<Rep> Lf;
     Father_t::set(Lf,n);
     //return phi (res,Lf,n);
@@ -29,11 +29,11 @@
 template<class RandIter>
 template< template<class, class> class Container, template<class> class Alloc>
  typename IntNumTheoDom<RandIter>::Rep& IntNumTheoDom<RandIter>::phi(Rep& res, 
const Container<Rep, Alloc<Rep> >& Lf, const Rep& n) const {
-    if (isleq(n,1)) return res=n;
-    if (isleq(n,3)) return sub(res,n,this->one);
+    if (this->isleq(n,1)) return res=n;
+    if (this->isleq(n,3)) return this->sub(res,n,this->one);
     res = n; Rep t,m;
     for(typename Container<Rep, Alloc<Rep> >::const_iterator f=Lf.begin(); 
f!=Lf.end(); ++f) 
-        mul(res, divexact(t,res,*f), sub(m, *f, this->one));
+        this->mul(res, this->divexact(t,res,*f), this->sub(m, *f, this->one));
     return res;
 }
 
@@ -402,8 +402,8 @@
 typename IntNumTheoDom<RandIter>::Rep& 
IntNumTheoDom<RandIter>::lowest_prim_root(Rep& A, const Rep& n) const {
         // n must be in {2,4,p^m,2p^m} where p is an odd prime
         // else returns zero
-    if (isleq(n,4)) return sub(A,n,this->one);
-    if (isZero(mod(A,n,4))) return A=this->zero;
+    if (this->isleq(n,4)) return this->sub(A,n,this->one);
+    if (isZero(this->mod(A,n,4))) return A=this->zero;
     Rep phin, tmp; 
     phi(phin,n);
     std::list<Rep> Lf;
@@ -412,15 +412,15 @@
     for(f=Lf.begin();f!=Lf.end();++f)
             this->div(*f,phin,*f);
     int found=0;
-    for(A = 2;(isleq(A,n) && (! found));addin(A,1)) {
+    for(A = 2;(this->isleq(A,n) && (! found));this->addin(A,1)) {
         if (isOne(gcd(tmp,A,n))) {
             found = 1;
             for(f=Lf.begin();(f!=Lf.end() && found);f++)
                 found = (! isOne( this->powmod(tmp,A,*f,n)) );
         }
     }
-    if (isleq(A,n))
-        return subin(A,1);
+    if (this->isleq(A,n))
+        return this->subin(A,1);
     else
         return A=this->zero; 
 }
--- givaro-3.2.13~/src/library/poly1/givpoly1factor.inl
+++ givaro-3.2.13/src/library/poly1/givpoly1factor.inl
@@ -24,7 +24,7 @@
     , Residu_t MOD) const {
        typename Domain::Element one;
        _domain.init(one, 1UL);
-    Degree dG;degree(dG,G);
+    Degree dG;this->degree(dG,G);
     if (dG == d)
         L.push_back(G);
     else {
@@ -32,7 +32,7 @@
         while (! splitted) {
             Rep tmp, G1;
             this->gcd(G1, G, this->random(_g, tmp, dG-1));
-            Degree dG1; degree(dG1,G1);
+            Degree dG1; this->degree(dG1,G1);
 // write(std::cerr << "SF rd: ", tmp) << std::endl;
 // write(std::cerr << "SF G1: ", G1) << std::endl;
             if ( dG1 != dG) {
@@ -44,8 +44,8 @@
                 Integer pp = (power(Integer(MOD), d.value()) - 1)/2;
 // std::cerr << "pp: " << pp << std::endl;
                 Rep tp, tp2, G2;
-                this->gcd(G2,G, sub(tp2, this->powmod(tp, tmp, pp, G) , one) );
-                Degree dG2; degree(dG2,G2);
+                this->gcd(G2,G, this->sub(tp2, this->powmod(tp, tmp, pp, G) , 
one) );
+                Degree dG2; this->degree(dG2,G2);
 // write(std::cerr << "SF t2: ", tp2) << std::endl;
 // write(std::cerr << "SF G2: ", G2) << std::endl;
                 if ( dG2 != dG) {
@@ -54,8 +54,8 @@
                         SplitFactor ( L, G2, d, MOD) ;
                     }
 // UNNECESSARY : ANYTHING FOUND BY G3 WOULD HAVE THE COFACTOR IN G2
-                     Rep G3; this->gcd(G3, G, add(tp2,tp,one) );
-                     Degree dG3; degree(dG3,G3);
+                     Rep G3; this->gcd(G3, G, this->add(tp2,tp,one) );
+                     Degree dG3; this->degree(dG3,G3);
 // write(std::cerr << "SF t3: ", tp2) << std::endl;
 // write(std::cerr << "SF G3: ", G3) << std::endl;
                      if (( dG3 != dG) && (dG3 > 0 )) {
@@ -133,21 +133,21 @@
 // write(std::cerr << "DD in: ", f) << std::endl;
     Rep W, D, P = f;
     Degree dP;
-    Rep Unit, G1; init(Unit, Degree(1), one);
+    Rep Unit, G1; this->init(Unit, Degree(1), one);
     W.copy(Unit);
-    degree(dP,P); Degree dPo = (dP/2);
+    this->degree(dP,P); Degree dPo = (dP/2);
     for(Degree dp = 1; dp <= dPo; ++dp) {
 // std::cerr << "DD degree: " << dp << std::endl;
         this->powmod(W, D.copy(W), MOD, P);
-        this->gcd (G1,sub(D,W,Unit), P) ;
-        Degree dG1; degree(dG1,G1);
+        this->gcd (G1,this->sub(D,W,Unit), P) ;
+        Degree dG1; this->degree(dG1,G1);
 // write(std::cerr << "DD found: ", G1) << ", of degree " << dG1 << std::endl;
         if ( dG1 > 0 ) {
             SplitFactor (L, G1, dp, MOD);
-            divin(P,G1);
+            this->divin(P,G1);
         }
     }
-    degree(dP,P);    
+    this->degree(dP,P);    
     if (dP > 0)
         L.push_back(P);
 // write(std::cerr << "DD: ", P) << std::endl;
@@ -165,10 +165,10 @@
               const Rep& P,
               Residu_t MOD)  const {
 // write(std::cerr << "CZ in: ", P) << std::endl;
-    Degree dp; degree(dp,P);
+    Degree dp; this->degree(dp,P);
     size_t nb=dp.value()+1; 
     Rep * g = new Rep[nb];
-    sqrfree(nb,g,P);
+    this->sqrfree(nb,g,P);
 // std::cerr << "CZ sqrfree: " << nb << std::endl;
     for(size_t i = 0; i<nb;++i) {
         size_t this_multiplicity = Lf.size();
@@ -200,17 +200,17 @@
         // Square free ?
    typename Domain::Element _one;
    _domain.init(_one,1UL); 
-   Rep W,D; this->gcd(W,diff(D,P),P);
+   Rep W,D; this->gcd(W,this->diff(D,P),P);
     Degree d, dP;
-    if (degree(d,W) > 0) return 0;
+    if (this->degree(d,W) > 0) return 0;
         // Distinct degree free ?
-    Rep Unit, G1; init(Unit, Degree(1), _one);
+    Rep Unit, G1; this->init(Unit, Degree(1), _one);
     W.copy(Unit);
-    degree(dP,P); Degree dPo = (dP/2);
+    this->degree(dP,P); Degree dPo = (dP/2);
     for(Degree dp = 1; dp <= dPo; ++dp) {
         this->powmod(W, D.copy(W), MOD, P);
-        this->gcd (G1, sub(D,W,Unit), P) ;
-        if ( degree(d,G1) > 0 ) return 0;
+        this->gcd (G1, this->sub(D,W,Unit), P) ;
+        if ( this->degree(d,G1) > 0 ) return 0;
     }
     return 1;
 }
--- givaro-3.2.13~/src/library/poly1/givpoly1proot.inl
+++ givaro-3.2.13/src/library/poly1/givpoly1proot.inl
@@ -28,7 +28,7 @@
 
 template<class Domain, class Tag, class RandIter >
 inline typename Poly1FactorDom<Domain,Tag, RandIter>::Element& 
Poly1FactorDom<Domain,Tag, RandIter>::creux_random_irreducible (Element& R, 
Degree n) const {
-    init(R, n, _domain.one);
+    this->init(R, n, _domain.one);
     Residu_t MOD = _domain.residu();
 
         // Search for an irreducible BINOMIAL : X^n + a
@@ -75,7 +75,7 @@
 inline typename Poly1FactorDom<Domain,Tag, RandIter>::Element& 
Poly1FactorDom<Domain,Tag, RandIter>::random_irreducible (Element& R, Degree n) 
const {
         // Search for a monic irreducible Polynomial
         // with random Elements
-    init(R, n, _domain.one);
+    this->init(R, n, _domain.one);
     Residu_t MOD = _domain.residu();
 
     do {
@@ -97,9 +97,9 @@
 // ---------------------------------------------------------------
 template<class Domain, class Tag, class RandIter >
 inline typename Poly1FactorDom<Domain,Tag, RandIter>::Element& 
Poly1FactorDom<Domain,Tag, RandIter>::ixe_irreducible (Element& R, Degree n) 
const {
-    init(R, n, _domain.one);
+    this->init(R, n, _domain.one);
     Element IXE;
-    init(IXE,Degree(1),_domain.one);
+    this->init(IXE,Degree(1),_domain.one);
     Residu_t MOD = _domain.residu();
 
         // Search for an irreducible BINOMIAL : X^n + a
@@ -229,13 +229,13 @@
 template<class Domain, class Tag, class RandIter>
 bool Poly1FactorDom<Domain,Tag, RandIter>::is_prim_root( const Rep& P, const 
Rep& F)  const {
     bool isproot = 0;
-    Rep A, G; mod(A,P,F);
+    Rep A, G; this->mod(A,P,F);
     Degree d;
-    if ( degree(d, this->gcd(G,A,F)) == 0) {
+    if ( this->degree(d, this->gcd(G,A,F)) == 0) {
         Residu_t MOD = _domain.residu();
         IntFactorDom<> FD;
         IntFactorDom<>::Element IMOD( MOD ), q, qp;
-        degree(d,F);
+        this->degree(d,F);
 //         FD.pow(q ,IMOD, d.value());
 //         FD.sub(qp, q, FD.one);
         FD.subin( FD.pow(qp ,IMOD, d.value()) , FD.one);
@@ -286,14 +286,14 @@
 
 template<class Domain, class Tag, class RandIter >
 inline typename Poly1FactorDom<Domain,Tag, RandIter>::Rep& 
Poly1FactorDom<Domain,Tag, RandIter>::give_prim_root(Rep& R, const Rep& F)  
const {
-    Degree n; degree(n,F);
+    Degree n; this->degree(n,F);
     Residu_t MOD = _domain.residu();
 //    this->write(std::cout << "Give Pr: ", F) << std::endl;
     
     
         // Search for a primitive BINOMIAL : X^i + a
     for(Degree di=1;di<n;++di) {
-        init(R, di, _domain.one);
+        this->init(R, di, _domain.one);
 //         for(Residu_t a=MOD; a--; ) {
         for(Residu_t a=0; a<MOD;++a ) {
             _domain.assign(R[0],a);
@@ -303,7 +303,7 @@
     }
         // Search for a primitive TRINOMIAL : X^i + b*X^j + a
     for(Degree di=2;di<n;++di) {
-        init(R, di, _domain.one);
+        this->init(R, di, _domain.one);
         for(Degree dj=1;dj<di;++dj)
 //             for(Residu_t b=MOD; b--;) {
             for(Residu_t b=0; b<MOD;++b) {

Reply via email to