This is the mail archive of the cygwin 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: How to get std::strtoull (unsigned long long)?

On Tue, Nov 29, 2011 at 11:04 AM, Markus Selve  wrote:
> Hello,
> I'm trying to use std::strtoull in a C++ program, but compiling it I get:
> ?error: 'strtoull' is not a member of 'std'
> It works, if I use strtoul ('unsigned long' versus 'unsigned long long'
> above).
> Cygwin uses newlib and I checked the documentation on the newlib homepage:
> It provides both the 'unsigned long' and the 'unsigned long long' version.
> Also cygwin/gcc allows to use 'unsigned long long' variables. ?So it's not
> that everything related 64 bit is not available, because I'm compiling for
> a 32bit Windows. ?Is there a special option I should use to get access to
> more 64 bit methods?
> Here is a simple test program to show the effect:
> #include <cstdlib>
> int main(int argc, char** argv)
> {
> ? ?unsigned long long l = 0;
> ? ?l = std::strtoull("0x100", NULL, 16);
> ? ?return 0;
> }
> This is the call to the compiler:
> $ g++ -Wall -o tt tt.cpp
> tt.cpp: In function 'int main(int, char**)':
> tt.cpp:7:9: error: 'strtoull' is not a member of 'std'
> Here is my version of cygwin and gcc / g++:
> CYGWIN_NT-5.1 XXXXXXXX 1.7.9(0.237/5/3) 2011-03-29 10:10 i686 Cygwin
> g++ (GCC) 4.5.3

Alas, cstdlib is missing the necessary using directive:

$ g++ -E strtoull.cpp | grep strto
# 1 "strtoull.cpp"
# 1 "strtoull.cpp"
          char * _strtok_last;
double __attribute__((__cdecl__)) strtod (const char *__n, char **__end_PTR);
double __attribute__((__cdecl__)) _strtod_r (struct _reent *,const
char *__n, char **__end_PTR);
float __attribute__((__cdecl__)) strtof (const char *__n, char **__end_PTR);
long __attribute__((__cdecl__)) strtol (const char *__n, char
**__end_PTR, int __base);
long __attribute__((__cdecl__)) _strtol_r (struct _reent *,const char
*__n, char **__end_PTR, int __base);
unsigned long __attribute__((__cdecl__)) strtoul (const char *__n,
char **__end_PTR, int __base);
unsigned long __attribute__((__cdecl__)) _strtoul_r (struct _reent
*,const char *__n, char **__end_PTR, int __base);
long long __attribute__((__cdecl__)) strtoll (const char *__n, char
**__end_PTR, int __base);
long long __attribute__((__cdecl__)) _strtoll_r (struct _reent *,
const char *__n, char **__end_PTR, int __base);
unsigned long long __attribute__((__cdecl__)) strtoull (const char
*__n, char **__end_PTR, int __base);
unsigned long long __attribute__((__cdecl__)) _strtoull_r (struct
_reent *, const char *__n, char **__end_PTR, int __base);
  using ::strtod;
  using ::strtol;
  using ::strtoul;
# 1 "strtoull.cpp" 2

So although stdlib.h defines strtoull, it is not made a member of namespace std.

GCS a+ e++ d- C++ ULS$ L+$ !E- W++ P+++$ w++$ tv+ b++ DI D++ 5++
The Tao of math: The numbers you can count are not the real numbers.
Life is complex, with real and imaginary parts.
"Ok, it boots. Which means it must be bug-free and perfect. " -- Linus Torvalds
"People disagree with me. I just ignore them." -- Linus Torvalds

Problem reports:
Unsubscribe info:

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