namespace __gnu_cxx { template struct basic_iterator { basic_iterator operator++(); T& operator*() const; T* operator->() const; }; template bool operator!=(basic_iterator, basic_iterator); } namespace std { template struct remove_reference { typedef T type; }; template struct remove_reference { typedef T type; }; template struct remove_reference { typedef T type; }; template typename remove_reference::type &&move(T &&t) noexcept; template auto data(const C &c) -> decltype(c.data()); template auto begin(C &c) -> decltype(c.begin()); template T *begin(T (&array)[N]); using size_t = decltype(sizeof(0)); template struct initializer_list { const T* ptr; size_t sz; }; template class allocator {}; template > struct vector { typedef __gnu_cxx::basic_iterator iterator; iterator begin(); iterator end(); const T *data() const; vector(); vector(initializer_list __l, const Alloc& alloc = Alloc()); template vector(InputIterator first, InputIterator __last); T &at(int n); void push_back(const T&); void push_back(T&&); const T& back() const; void insert(iterator, T&&); }; template struct basic_string_view { basic_string_view(); basic_string_view(const T *); const T *begin() const; const T *data() const; }; using string_view = basic_string_view; template struct iter { iter& operator-=(int); iter operator-(int _Off) const { iter _Tmp = *this; return _Tmp -= _Off; } }; template struct basic_string { basic_string(); basic_string(const T *); const T *c_str() const; operator basic_string_view () const; using const_iterator = iter; const T *data() const; }; using string = basic_string; template struct unique_ptr { T &operator*(); T *get() const; }; template struct optional { optional(); optional(const T&); template optional(U&& t); template optional(optional&& __t); T &operator*() &; T &&operator*() &&; T &value() &; T &&value() &&; }; template optional<__decay(T)> make_optional(T&&); template struct stack { T &top(); }; struct any {}; template T any_cast(const any& operand); template struct reference_wrapper { template reference_wrapper(U &&); }; template reference_wrapper ref(T& t) noexcept; template struct [[gsl::Pointer]] iterator { T& operator*() const; }; struct false_type { static constexpr bool value = false; constexpr operator bool() const noexcept { return value; } }; struct true_type { static constexpr bool value = true; constexpr operator bool() const noexcept { return value; } }; template struct is_pointer : false_type {}; template struct is_pointer : true_type {}; template struct is_pointer : true_type {}; }