This is the mail archive of the cygwin-talk@cygwin.com mailing list for the cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: gcc-3.3.3 :fpclassify


Thanks.

gcc 3.4.1 works with this simple file.


Regards

zhang 

引用 Dave Korn <dave.korn@artimi.com>:

> > -----Original Message-----
> > From: cygwin-talk-owner On Behalf Of Jianguo.Zhang
> > Sent: 30 December 2004 20:56
> 
> > The gcc/g++ version is 3.3.3
> > 
> > I am trying to compile the following program using g++ 3.3.3
> 
> >          if (FP_ZERO != std::fpclassify (a)) abort ();        
> >                    
> >                                                               
> >    if (FP_NAN != std::fpclassify (b)) abort ();               
> >                    
> >                                                         
> >   if (FP_NORMAL != std::fpclassify (c)) abort ();             
> 
> > When I use the following command to compile this file under cygwin:
> > 
> > $ g++ test.cpp
> > 
> > the following errors occurs:
> > 
> > test.cpp: In function `int main()':
> > test.cpp:17: error: `fpclassify' undeclared in namespace `std'
> > test.cpp:18: error: `fpclassify' undeclared in namespace `std'
> > test.cpp:19: error: `fpclassify' undeclared in namespace `std'
> > 
> > there is no problem to compile the file under linux system 
> > using g++ 3.3.1
> > 
> > Could anyone tell me why?
> 
> 
>   It changed in 3.3.3; in earlier versions it was indeed in namespace std.
> 
>   It is a macro, defined in /usr/include/math.h, which is included by cmath,
> but
> then (since 3.3.3) cmath has a section that undefines it again; this is
> apparently for strict c++ standard conformance.
> 
>   In gnu libstdc++, the macro is placed into namespace __gnu_cxx before it
> is
> undefined, used to make a template function that will accept any type, and
> then
> imported from there to std:: later.  This is under the control of two
> #defines,
> _GLIBCPP_USE_C99 and _GLIBCPP_USE_C99_FP_MACROS_DYNAMIC.  Unfortunately,
> these
> can't just be set at the top of your code before the #includes, as then
> cstdlib
> goes and breaks.  These defines live in
> /usr/include/c++/3.3.3/i686-pc-cygwin/bits/c++config.h, and they are created
> at
> the time the compiler itself is being configured and built.
> 
>   The cygwin compiler, it seems, was compiled without using the
> --enable-c99
> option at configure time, whereas the linux version you've used was.
> 
> http://gcc.gnu.org/ml/libstdc++/2001-04/msg00345.html
> and follow ups, and particularly the referenced thread
> http://gcc.gnu.org/ml/libstdc++/2001-04/msg00120.html
> make it clear what's going on.
> 
>   There are various answers and workarounds.  One would be to recompile gcc
> (perhaps just libstdc++ would be enough) for cygwin with --enable-c99. 
> Another
> would be to copy the definitions into your own code from math.h.
> 
>   Gerrit, does the output from "gcc -v" for 3.4.1 show "--enable-c99"?  Or
> has
> someone fixed it in the headers somehow?
> 
>     cheers, 
>       DaveK
> -- 
> Can't think of a witty .sigline today....
> 
> 
> 



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]