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