#10892: lcalc fails to build with gcc-4.6
----------------------------+-----------------------------------------------
   Reporter:  vbraun        |       Owner:  tbd     
       Type:  defect        |      Status:  new     
   Priority:  major         |   Milestone:  sage-4.7
  Component:  packages      |    Keywords:          
     Author:  Volker Braun  |    Upstream:  N/A     
   Reviewer:                |      Merged:          
Work_issues:                |  
----------------------------+-----------------------------------------------
 lcalc fails to build with the gcc-4.6 version in Fedora 15 alpha:
 {{{
 In file included from ../include/Lglobals.h:51:0,
                  from Lglobals.cc:23:
 /usr/lib/gcc/x86_64-redhat-
 linux/4.6.0/../../../../include/c++/4.6.0/limits: In static member
 function ‘static
  double std::numeric_limits<double>::min()’:
 /usr/lib/gcc/x86_64-redhat-
 linux/4.6.0/../../../../include/c++/4.6.0/limits:1479:83: error: call of
 overloaded ‘lcalc_to_double(long double)’ is ambiguous
 /usr/lib/gcc/x86_64-redhat-
 linux/4.6.0/../../../../include/c++/4.6.0/limits:1479:83: note: candidates
 are:
 ../include/Lcommon.h:18:15: note: double lcalc_to_double(const Double&)
 ../include/Lcommon.h:29:15: note: double lcalc_to_double(const int&)
 ../include/Lcommon.h:30:15: note: double lcalc_to_double(const long long
 int&)
 ../include/Lcommon.h:31:15: note: double lcalc_to_double(const short int&)
 ../include/Lcommon.h:32:15: note: double lcalc_to_double(const char&)
 ../include/Lcommon.h:33:15: note: double lcalc_to_double(const long int&)
 ../include/Lcommon.h:34:15: note: double lcalc_to_double(const unsigned
 int&)
 ../include/Lcommon.h:35:15: note: double lcalc_to_double(const long
 unsigned int&)
 }}}
 The reason is the following code horror from `src/src/include/Lcommon.h`
 (some editing for clarity):
 {{{
 inline double lcalc_to_double(const Double& x) { return x; }
 inline double lcalc_to_double(const double& x) { return x; }
 //inline double lcalc_to_double(const long double& x) { return x; }
 inline double lcalc_to_double(const int& x) { return x; }
 inline double lcalc_to_double(const long long& x) { return x; }
 inline double lcalc_to_double(const short& x) { return x; }
 inline double lcalc_to_double(const char& x) { return x; }
 inline double lcalc_to_double(const long int& x) { return x; }
 inline double lcalc_to_double(const unsigned int& x) { return x; }
 inline double lcalc_to_double(const long unsigned int& x) { return x; }
 #define Int(x) (int)(lcalc_to_double(x))
 #define Long(x) (Long)(lcalc_to_double(x))
 #define double(x) (double)(lcalc_to_double(x))
 }}}
 The last three lines are clearly a bad idea to define before including
 system headers! As a bandaid, I uncommented the `inline double
 lcalc_to_double(const long double& x)`, and it compiles fine now. But
 somebody who is familiar with the codebase should really rewrite lcalc to
 not redefine the `double()` cast, thats just fragile and will sooner or
 later again fail inside some system headers.

 My updated spkg is here:

 http://www.stp.dias.ie/~vbraun/Sage/spkg/lcalc-20100428-1.23.p6.spkg

 It would be nice if we could update the spkg before Fedora 15 is released!

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/10892>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to