18c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// Like the compiler, the static analyzer treats some functions differently if
28c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// they come from a system header -- for example, it is assumed that system
38c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// functions do not arbitrarily free() their parameters, and that some bugs
48c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// found in system headers cannot be fixed by the user and should be
58c888b10fdd2846885e8582b131fa076ce1b77b1Jordan Rose// suppressed.
681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose#pragma clang system_header
781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
8bdc0bf3f84b8771572d8401c66903c56a2e1318eAnna Zakstypedef unsigned char uint8_t;
9bdc0bf3f84b8771572d8401c66903c56a2e1318eAnna Zaks
104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartypedef __typeof__(sizeof(int)) size_t;
114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid *memmove(void *s1, const void *s2, size_t n);
124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rosenamespace std {
1481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  template <class T1, class T2>
1581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  struct pair {
1681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T1 first;
1781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T2 second;
1881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
1981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    pair() : first(), second() {}
2081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    pair(const T1 &a, const T2 &b) : first(a), second(b) {}
2181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
2281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    template<class U1, class U2>
2381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    pair(const pair<U1, U2> &other) : first(other.first), second(other.second) {}
2481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  };
2581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
2681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  typedef __typeof__(sizeof(int)) size_t;
2781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
2881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  template<typename T>
2981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  class vector {
3081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T *_start;
3181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T *_finish;
3281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T *_end_of_storage;
3381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  public:
3481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    vector() : _start(0), _finish(0), _end_of_storage(0) {}
3581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    ~vector();
3681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
3781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    size_t size() const {
3881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose      return size_t(_finish - _start);
3981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    }
4081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
4181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    void push_back();
4281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T pop_back();
4381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
4481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T &operator[](size_t n) {
4581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose      return _start[n];
4681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    }
4781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
4881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    const T &operator[](size_t n) const {
4981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose      return _start[n];
5081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    }
5181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
5281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T *begin() { return _start; }
5381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    const T *begin() const { return _start; }
5481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
5581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    T *end() { return _finish; }
5681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    const T *end() const { return _finish; }
5781fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  };
5881fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose
5981fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  class exception {
6081fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  public:
6181fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    exception() throw();
6281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    virtual ~exception() throw();
6381fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    virtual const char *what() const throw() {
6481fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose      return 0;
6581fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose    }
6681fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose  };
672de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev
682de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev  class bad_alloc : public exception {
692de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev    public:
702de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev    bad_alloc() throw();
712de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev    bad_alloc(const bad_alloc&) throw();
722de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev    bad_alloc& operator=(const bad_alloc&) throw();
732de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev    virtual const char* what() const throw() {
742de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev      return 0;
752de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev    }
762de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev  };
772de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev
782de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev  struct nothrow_t {};
792de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev
802de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev  extern const nothrow_t nothrow;
81a12643622ad3b85972dfdd80fe9006a3e8d8fb80Jordan Rose
82be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose  // libc++'s implementation
83be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose  template <class _E>
84be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose  class initializer_list
85be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose  {
86be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    const _E* __begin_;
87be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    size_t    __size_;
88be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose
89be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    initializer_list(const _E* __b, size_t __s)
90be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose      : __begin_(__b),
91be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose        __size_(__s)
92be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    {}
93be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose
94be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose  public:
95be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    typedef _E        value_type;
96be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    typedef const _E& reference;
97be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    typedef const _E& const_reference;
98be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    typedef size_t    size_type;
99be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose
100be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    typedef const _E* iterator;
101be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    typedef const _E* const_iterator;
102be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose
103be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    initializer_list() : __begin_(0), __size_(0) {}
104be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose
105be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    size_t    size()  const {return __size_;}
106be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    const _E* begin() const {return __begin_;}
107be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose    const _E* end()   const {return __begin_ + __size_;}
108be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose  };
109be2e1b11e3350e3a6e632c71beaab83aae3824d2Jordan Rose
1104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <bool, class _Tp = void> struct enable_if {};
1114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp> struct enable_if<true, _Tp> {typedef _Tp type;};
112776d3bb65c90278b9c65544b235d2ac40aea1d6eJordan Rose
1134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp, _Tp __v>
1144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  struct integral_constant
1154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  {
1164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      static const _Tp      value = __v;
1174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      typedef _Tp               value_type;
1184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      typedef integral_constant type;
1198b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks
1204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar     operator value_type() const {return value;}
121fda9dbf1f4d15baaedffdd4b4bb529e06172f73dJordan Rose
1224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar     value_type operator ()() const {return value;}
123fda9dbf1f4d15baaedffdd4b4bb529e06172f73dJordan Rose  };
1248b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks
1254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp, _Tp __v>
1264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  const _Tp integral_constant<_Tp, __v>::value;
1278b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks
1284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    template <class _Tp, class _Arg>
1294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    struct is_trivially_assignable
1304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      : integral_constant<bool, __is_trivially_assignable(_Tp, _Arg)>
1314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    {
1324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    };
1338b625a3f7764959d0a2ac3cd860ce1e168e0fc9bAnna Zaks
1344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  typedef integral_constant<bool,true>  true_type;
1354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  typedef integral_constant<bool,false> false_type;
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
1374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp> struct is_const            : public false_type {};
1384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp> struct is_const<_Tp const> : public true_type {};
139fda9dbf1f4d15baaedffdd4b4bb529e06172f73dJordan Rose
1404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp> struct  is_reference        : public false_type {};
1414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp> struct  is_reference<_Tp&>  : public true_type {};
142fda9dbf1f4d15baaedffdd4b4bb529e06172f73dJordan Rose
1434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp, class _Up> struct  is_same           : public false_type {};
1444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp>            struct  is_same<_Tp, _Tp> : public true_type {};
1454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp, bool = is_const<_Tp>::value || is_reference<_Tp>::value    >
1474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  struct __add_const             {typedef _Tp type;};
1484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp>
1504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  struct __add_const<_Tp, false> {typedef const _Tp type;};
1514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp> struct add_const {typedef typename __add_const<_Tp>::type type;};
153fda9dbf1f4d15baaedffdd4b4bb529e06172f73dJordan Rose
1544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp> struct  remove_const            {typedef _Tp type;};
1554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp> struct  remove_const<const _Tp> {typedef _Tp type;};
1564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp> struct  add_lvalue_reference    {typedef _Tp& type;};
1584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp> struct is_trivially_copy_assignable
1604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      : public is_trivially_assignable<typename add_lvalue_reference<_Tp>::type,
1614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar            typename add_lvalue_reference<typename add_const<_Tp>::type>::type> {};
1624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    template<class InputIter, class OutputIter>
1644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    OutputIter __copy(InputIter II, InputIter IE, OutputIter OI) {
1654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      while (II != IE)
1664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar        *OI++ = *II++;
1674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      return OI;
169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    }
170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
1714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp, class _Up>
1724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  inline
1734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  typename enable_if
1744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  <
1754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      is_same<typename remove_const<_Tp>::type, _Up>::value &&
1764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      is_trivially_copy_assignable<_Up>::value,
1774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      _Up*
1784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  >::type __copy(_Tp* __first, _Tp* __last, _Up* __result) {
1794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      size_t __n = __last - __first;
1804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      if (__n > 0)
1824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar        memmove(__result, __first, __n * sizeof(_Up));
1834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      return __result + __n;
185651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    }
186651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
1874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template<class InputIter, class OutputIter>
1884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  OutputIter copy(InputIter II, InputIter IE, OutputIter OI) {
1894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    return __copy(II, IE, OI);
1904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  }
1914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _BidirectionalIterator, class _OutputIterator>
1934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  inline
1944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  _OutputIterator
1954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  __copy_backward(_BidirectionalIterator __first, _BidirectionalIterator __last,
1964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar                  _OutputIterator __result)
1974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  {
1984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      while (__first != __last)
1994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar          *--__result = *--__last;
2004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      return __result;
2014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  }
2024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template <class _Tp, class _Up>
2044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  inline
2054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  typename enable_if
2064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  <
2074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      is_same<typename remove_const<_Tp>::type, _Up>::value &&
2084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      is_trivially_copy_assignable<_Up>::value,
2094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      _Up*
2104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  >::type __copy_backward(_Tp* __first, _Tp* __last, _Up* __result) {
2114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar      size_t __n = __last - __first;
2124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    if (__n > 0)
2144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    {
2154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar        __result -= __n;
2164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar        memmove(__result, __first, __n * sizeof(_Up));
217fda9dbf1f4d15baaedffdd4b4bb529e06172f73dJordan Rose    }
2184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    return __result;
2194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  }
2204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  template<class InputIter, class OutputIter>
2224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  OutputIter copy_backward(InputIter II, InputIter IE, OutputIter OI) {
2234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    return __copy_backward(II, IE, OI);
2244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  }
2254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  struct input_iterator_tag { };
2274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  struct output_iterator_tag { };
2284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  struct forward_iterator_tag : public input_iterator_tag { };
2294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  struct bidirectional_iterator_tag : public forward_iterator_tag { };
2304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  struct random_access_iterator_tag : public bidirectional_iterator_tag { };
2314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
23281fb50e8b120fc95dc0245b4112972d4d7cca3b5Jordan Rose}
2332de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev
2342de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid* operator new(std::size_t, const std::nothrow_t&) throw();
2352de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid* operator new[](std::size_t, const std::nothrow_t&) throw();
2362de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid operator delete(void*, const std::nothrow_t&) throw();
2372de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid operator delete[](void*, const std::nothrow_t&) throw();
2382de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsev
2392de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid* operator new (std::size_t size, void* ptr) throw() { return ptr; };
2402de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid* operator new[] (std::size_t size, void* ptr) throw() { return ptr; };
2412de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid operator delete (void* ptr, void*) throw() {};
2422de19edab6001d2c17720d02fe0760b9b452192aAnton Yartsevvoid operator delete[] (void* ptr, void*) throw() {};
243