Christian Franke wrote: > Defining _GLIBCXX_USE_C99 does not work with current Cygwin C++ includes. > > Testcase: > > #define _GLIBCXX_USE_C99 1 // need std::llabs() > > #include <cstdlib> > > long long f(long long x) > { > return std::llabs(x); > } > > > Compile fails with: > > /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/cstdlib:181: > error: `::strtold' has not been declared > /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/cstdlib:200: > error: `__gnu_cxx::strtold' has not been declared > > > The function strtold() does actually not exist in stdlib.h > and the corresponding _GLIBCXX_HAVE_STRTOLD in > /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/i686-pc-cygwin/bits/c++config.h > > is not set. > > But "using ::strtold" exists in the "#if _GLIBCXX_USE_C99" part of > /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/cstdlib > > Workaround: delete the two "using ::strtold" lines from cstdlib. > > Christian Look into the cstdlib header. You will find that llabs(long long) and abs(long long) are in the __gnu_cxx namespace there. It is because long long is not C++ standard type.
-- Vaclav Haisman
signature.asc
Description: OpenPGP digital signature