1 // -*- C++ -*- forwarding header.
 
    3 // Copyright (C) 1997-2014 Free Software Foundation, Inc.
 
    5 // This file is part of the GNU ISO C++ Library.  This library is free
 
    6 // software; you can redistribute it and/or modify it under the
 
    7 // terms of the GNU General Public License as published by the
 
    8 // Free Software Foundation; either version 3, or (at your option)
 
   11 // This library is distributed in the hope that it will be useful,
 
   12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 
   13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
   14 // GNU General Public License for more details.
 
   16 // Under Section 7 of GPL version 3, you are granted additional
 
   17 // permissions described in the GCC Runtime Library Exception, version
 
   18 // 3.1, as published by the Free Software Foundation.
 
   20 // You should have received a copy of the GNU General Public License and
 
   21 // a copy of the GCC Runtime Library Exception along with this program;
 
   22 // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
   23 // <http://www.gnu.org/licenses/>.
 
   25 /** @file include/cstdlib
 
   26  *  This is a Standard C++ Library file.  You should @c \#include this file
 
   27  *  in your programs, rather than any of the @a *.h implementation files.
 
   29  *  This is the C++ version of the Standard C Library header @c stdlib.h,
 
   30  *  and its contents are (mostly) the same as that header, but are all
 
   31  *  contained in the namespace @c std (except for names which are defined
 
   36 // ISO C++ 14882: 20.4.6  C library
 
   39 #pragma GCC system_header
 
   41 #include <bits/c++config.h>
 
   43 #ifndef _GLIBCXX_CSTDLIB
 
   44 #define _GLIBCXX_CSTDLIB 1
 
   47 // The C standard does not require a freestanding implementation to
 
   48 // provide <stdlib.h>.  However, the C++ standard does still require
 
   49 // <cstdlib> -- but only the functionality mentioned in
 
   50 // [lib.support.start.term].
 
   52 #define EXIT_SUCCESS 0
 
   53 #define EXIT_FAILURE 1
 
   57   extern "C" void abort(void) throw () _GLIBCXX_NORETURN;
 
   58   extern "C" int atexit(void (*)(void)) throw ();
 
   59   extern "C" void exit(int) throw () _GLIBCXX_NORETURN;
 
   60 #if __cplusplus >= 201103L
 
   61 # ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
 
   62   extern "C" int at_quick_exit(void (*)(void)) throw ();
 
   64 # ifdef _GLIBCXX_HAVE_QUICK_EXIT
 
   65   extern "C" void quick_exit(int) throw() _GLIBCXX_NORETURN;
 
   74 // Get rid of those macros defined in <stdlib.h> in lieu of real functions.
 
   78 #if __cplusplus >= 201103L
 
   79 # ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
 
   99 #if __cplusplus >= 201103L
 
  100 # ifdef _GLIBCXX_HAVE_QUICK_EXIT
 
  114 namespace std _GLIBCXX_VISIBILITY(default)
 
  116 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
  124 #if __cplusplus >= 201103L
 
  125 # ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT
 
  126   using ::at_quick_exit;
 
  141 #ifdef _GLIBCXX_HAVE_MBSTATE_T
 
  145 #endif // _GLIBCXX_HAVE_MBSTATE_T
 
  147 #if __cplusplus >= 201103L
 
  148 # ifdef _GLIBCXX_HAVE_QUICK_EXIT
 
  159 #ifdef _GLIBCXX_USE_WCHAR_T
 
  162 #endif // _GLIBCXX_USE_WCHAR_T
 
  164 #ifndef __CORRECT_ISO_CPP_STDLIB_H_PROTO
 
  166   abs(long __i) { return __builtin_labs(__i); }
 
  169   div(long __i, long __j) { return ldiv(__i, __j); }
 
  172 #ifdef _GLIBCXX_USE_LONG_LONG
 
  174   abs(long long __x) { return __builtin_llabs (__x); }
 
  177 #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
 
  179   abs(__int128 __x) { return __x >= 0 ? __x : -__x; }
 
  182 _GLIBCXX_END_NAMESPACE_VERSION
 
  196 namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
 
  198 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
  200 #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
 
  203 #if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
 
  204   extern "C" void (_Exit)(int) throw () _GLIBCXX_NORETURN;
 
  206 #if !_GLIBCXX_USE_C99_DYNAMIC
 
  210 #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
 
  214   div(long long __n, long long __d)
 
  215   { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
 
  220 #if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
 
  221   extern "C" long long int (atoll)(const char *) throw ();
 
  222   extern "C" long long int
 
  223     (strtoll)(const char * __restrict, char ** __restrict, int) throw ();
 
  224   extern "C" unsigned long long int
 
  225     (strtoull)(const char * __restrict, char ** __restrict, int) throw ();
 
  227 #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
 
  235 _GLIBCXX_END_NAMESPACE_VERSION
 
  236 } // namespace __gnu_cxx
 
  240 #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
 
  241   using ::__gnu_cxx::lldiv_t;
 
  243   using ::__gnu_cxx::_Exit;
 
  244 #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
 
  245   using ::__gnu_cxx::llabs;
 
  246   using ::__gnu_cxx::div;
 
  247   using ::__gnu_cxx::lldiv;
 
  249   using ::__gnu_cxx::atoll;
 
  250   using ::__gnu_cxx::strtof;
 
  251   using ::__gnu_cxx::strtoll;
 
  252   using ::__gnu_cxx::strtoull;
 
  253   using ::__gnu_cxx::strtold;
 
  256 #endif // _GLIBCXX_USE_C99
 
  258 #endif // !_GLIBCXX_HOSTED