151 lines · c
1 2namespace __gnu_cxx {3template <typename T>4struct basic_iterator {5 basic_iterator operator++();6 T& operator*() const;7 T* operator->() const;8};9 10template<typename T>11bool operator!=(basic_iterator<T>, basic_iterator<T>);12}13 14namespace std {15template<typename T> struct remove_reference { typedef T type; };16template<typename T> struct remove_reference<T &> { typedef T type; };17template<typename T> struct remove_reference<T &&> { typedef T type; };18 19template<typename T>20typename remove_reference<T>::type &&move(T &&t) noexcept;21 22template <typename C>23auto data(const C &c) -> decltype(c.data());24 25template <typename C>26auto begin(C &c) -> decltype(c.begin());27 28template<typename T, int N>29T *begin(T (&array)[N]);30 31using size_t = decltype(sizeof(0));32 33template<typename T>34struct initializer_list {35 const T* ptr; size_t sz;36};37template<typename T> class allocator {};38template <typename T, typename Alloc = allocator<T>>39struct vector {40 typedef __gnu_cxx::basic_iterator<T> iterator;41 iterator begin();42 iterator end();43 const T *data() const;44 vector();45 vector(initializer_list<T> __l,46 const Alloc& alloc = Alloc());47 48 template<typename InputIterator>49 vector(InputIterator first, InputIterator __last);50 51 T &at(int n);52 53 void push_back(const T&);54 void push_back(T&&);55 const T& back() const;56 void insert(iterator, T&&);57};58 59template<typename T>60struct basic_string_view {61 basic_string_view();62 basic_string_view(const T *);63 const T *begin() const;64 const T *data() const;65};66using string_view = basic_string_view<char>;67 68template<class _Mystr> struct iter {69 iter& operator-=(int);70 71 iter operator-(int _Off) const {72 iter _Tmp = *this;73 return _Tmp -= _Off;74 }75};76 77template<typename T>78struct basic_string {79 basic_string();80 basic_string(const T *);81 const T *c_str() const;82 operator basic_string_view<T> () const;83 using const_iterator = iter<T>;84 const T *data() const;85};86using string = basic_string<char>;87 88template<typename T>89struct unique_ptr {90 T &operator*();91 T *get() const;92};93 94template<typename T>95struct optional {96 optional();97 optional(const T&);98 99 template<typename U = T>100 optional(U&& t);101 102 template<typename U>103 optional(optional<U>&& __t);104 105 T &operator*() &;106 T &&operator*() &&;107 T &value() &;108 T &&value() &&;109};110template<typename T>111optional<__decay(T)> make_optional(T&&);112 113 114template<typename T>115struct stack {116 T &top();117};118 119struct any {};120 121template<typename T>122T any_cast(const any& operand);123 124template<typename T>125struct reference_wrapper {126 template<typename U>127 reference_wrapper(U &&);128};129 130template<typename T>131reference_wrapper<T> ref(T& t) noexcept;132 133template <typename T>134struct [[gsl::Pointer]] iterator {135 T& operator*() const;136};137 138struct false_type {139 static constexpr bool value = false;140 constexpr operator bool() const noexcept { return value; }141};142struct true_type {143 static constexpr bool value = true;144 constexpr operator bool() const noexcept { return value; }145};146 147template<class T> struct is_pointer : false_type {};148template<class T> struct is_pointer<T*> : true_type {};149template<class T> struct is_pointer<T* const> : true_type {};150}151