1*87ca6386SNathan James #ifndef USE_RANGES_FAKE_STD_H 2*87ca6386SNathan James #define USE_RANGES_FAKE_STD_H 3*87ca6386SNathan James namespace std { 4*87ca6386SNathan James 5*87ca6386SNathan James template <typename T> class vector { 6*87ca6386SNathan James public: 7*87ca6386SNathan James using iterator = T *; 8*87ca6386SNathan James using const_iterator = const T *; 9*87ca6386SNathan James using reverse_iterator = T*; 10*87ca6386SNathan James using reverse_const_iterator = const T*; 11*87ca6386SNathan James 12*87ca6386SNathan James constexpr const_iterator begin() const; 13*87ca6386SNathan James constexpr const_iterator end() const; 14*87ca6386SNathan James constexpr const_iterator cbegin() const; 15*87ca6386SNathan James constexpr const_iterator cend() const; 16*87ca6386SNathan James constexpr iterator begin(); 17*87ca6386SNathan James constexpr iterator end(); 18*87ca6386SNathan James constexpr reverse_const_iterator rbegin() const; 19*87ca6386SNathan James constexpr reverse_const_iterator rend() const; 20*87ca6386SNathan James constexpr reverse_const_iterator crbegin() const; 21*87ca6386SNathan James constexpr reverse_const_iterator crend() const; 22*87ca6386SNathan James constexpr reverse_iterator rbegin(); 23*87ca6386SNathan James constexpr reverse_iterator rend(); 24*87ca6386SNathan James }; 25*87ca6386SNathan James 26*87ca6386SNathan James template <typename Container> constexpr auto begin(const Container &Cont) { 27*87ca6386SNathan James return Cont.begin(); 28*87ca6386SNathan James } 29*87ca6386SNathan James 30*87ca6386SNathan James template <typename Container> constexpr auto begin(Container &Cont) { 31*87ca6386SNathan James return Cont.begin(); 32*87ca6386SNathan James } 33*87ca6386SNathan James 34*87ca6386SNathan James template <typename Container> constexpr auto end(const Container &Cont) { 35*87ca6386SNathan James return Cont.end(); 36*87ca6386SNathan James } 37*87ca6386SNathan James 38*87ca6386SNathan James template <typename Container> constexpr auto end(Container &Cont) { 39*87ca6386SNathan James return Cont.end(); 40*87ca6386SNathan James } 41*87ca6386SNathan James 42*87ca6386SNathan James template <typename Container> constexpr auto cbegin(const Container &Cont) { 43*87ca6386SNathan James return Cont.cbegin(); 44*87ca6386SNathan James } 45*87ca6386SNathan James 46*87ca6386SNathan James template <typename Container> constexpr auto cend(const Container &Cont) { 47*87ca6386SNathan James return Cont.cend(); 48*87ca6386SNathan James } 49*87ca6386SNathan James // Find 50*87ca6386SNathan James template< class InputIt, class T > 51*87ca6386SNathan James InputIt find(InputIt first, InputIt last, const T& value); 52*87ca6386SNathan James 53*87ca6386SNathan James template <typename Iter> void reverse(Iter begin, Iter end); 54*87ca6386SNathan James 55*87ca6386SNathan James template <class InputIt1, class InputIt2> 56*87ca6386SNathan James bool includes(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2); 57*87ca6386SNathan James 58*87ca6386SNathan James template <class ForwardIt1, class ForwardIt2> 59*87ca6386SNathan James bool is_permutation(ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, 60*87ca6386SNathan James ForwardIt2 last2); 61*87ca6386SNathan James 62*87ca6386SNathan James template <class BidirIt> 63*87ca6386SNathan James bool next_permutation(BidirIt first, BidirIt last); 64*87ca6386SNathan James 65*87ca6386SNathan James inline namespace inline_test{ 66*87ca6386SNathan James 67*87ca6386SNathan James template <class ForwardIt1, class ForwardIt2> 68*87ca6386SNathan James bool equal(ForwardIt1 first1, ForwardIt1 last1, 69*87ca6386SNathan James ForwardIt2 first2, ForwardIt2 last2); 70*87ca6386SNathan James 71*87ca6386SNathan James template <class RandomIt> 72*87ca6386SNathan James void push_heap(RandomIt first, RandomIt last); 73*87ca6386SNathan James 74*87ca6386SNathan James template <class InputIt, class OutputIt, class UnaryPred> 75*87ca6386SNathan James OutputIt copy_if(InputIt first, InputIt last, OutputIt d_first, UnaryPred pred); 76*87ca6386SNathan James 77*87ca6386SNathan James template <class ForwardIt> 78*87ca6386SNathan James ForwardIt is_sorted_until(ForwardIt first, ForwardIt last); 79*87ca6386SNathan James 80*87ca6386SNathan James template <class InputIt> 81*87ca6386SNathan James void reduce(InputIt first, InputIt last); 82*87ca6386SNathan James 83*87ca6386SNathan James template <class InputIt, class T> 84*87ca6386SNathan James T reduce(InputIt first, InputIt last, T init); 85*87ca6386SNathan James 86*87ca6386SNathan James template <class InputIt, class T, class BinaryOp> 87*87ca6386SNathan James T reduce(InputIt first, InputIt last, T init, BinaryOp op) { 88*87ca6386SNathan James // Need a definition to suppress undefined_internal_type when invoked with lambda 89*87ca6386SNathan James return init; 90*87ca6386SNathan James } 91*87ca6386SNathan James 92*87ca6386SNathan James template <class InputIt, class T> 93*87ca6386SNathan James T accumulate(InputIt first, InputIt last, T init); 94*87ca6386SNathan James 95*87ca6386SNathan James } // namespace inline_test 96*87ca6386SNathan James 97*87ca6386SNathan James } // namespace std 98*87ca6386SNathan James 99*87ca6386SNathan James #endif // USE_RANGES_FAKE_STD_H 100