X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org MIME-Version: 1.0 In-Reply-To: References: Date: Tue, 29 Nov 2011 11:22:49 +0100 Message-ID: Subject: Re: How to get std::strtoull (unsigned long long)? From: Csaba Raduly To: cygwin AT cygwin DOT com, MSELVE AT de DOT ibm DOT com Content-Type: text/plain; charset=ISO-8859-1 Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id pATANA73004907 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 > > 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: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple