| // Like the compiler, the static analyzer treats some functions differently if |
| // they come from a system header -- for example, it is assumed that system |
| // functions do not arbitrarily free() their parameters, and that some bugs |
| // found in system headers cannot be fixed by the user and should be |
| // suppressed. |
| #pragma clang system_header |
| |
| namespace std { |
| template <class T1, class T2> |
| struct pair { |
| T1 first; |
| T2 second; |
| |
| pair() : first(), second() {} |
| pair(const T1 &a, const T2 &b) : first(a), second(b) {} |
| |
| template<class U1, class U2> |
| pair(const pair<U1, U2> &other) : first(other.first), second(other.second) {} |
| }; |
| |
| typedef __typeof__(sizeof(int)) size_t; |
| |
| template<typename T> |
| class vector { |
| T *_start; |
| T *_finish; |
| T *_end_of_storage; |
| public: |
| vector() : _start(0), _finish(0), _end_of_storage(0) {} |
| ~vector(); |
| |
| size_t size() const { |
| return size_t(_finish - _start); |
| } |
| |
| void push_back(); |
| T pop_back(); |
| |
| T &operator[](size_t n) { |
| return _start[n]; |
| } |
| |
| const T &operator[](size_t n) const { |
| return _start[n]; |
| } |
| |
| T *begin() { return _start; } |
| const T *begin() const { return _start; } |
| |
| T *end() { return _finish; } |
| const T *end() const { return _finish; } |
| }; |
| |
| class exception { |
| public: |
| exception() throw(); |
| virtual ~exception() throw(); |
| virtual const char *what() const throw() { |
| return 0; |
| } |
| }; |
| } |