#ifndef USE_RANGES_FAKE_STD_H #define USE_RANGES_FAKE_STD_H namespace std { template class vector { public: using iterator = T *; using const_iterator = const T *; using reverse_iterator = T *; using reverse_const_iterator = const T *; constexpr const_iterator begin() const; constexpr const_iterator end() const; constexpr const_iterator cbegin() const; constexpr const_iterator cend() const; constexpr iterator begin(); constexpr iterator end(); constexpr reverse_const_iterator rbegin() const; constexpr reverse_const_iterator rend() const; constexpr reverse_const_iterator crbegin() const; constexpr reverse_const_iterator crend() const; constexpr reverse_iterator rbegin(); constexpr reverse_iterator rend(); }; template constexpr auto begin(const Container &Cont) { return Cont.begin(); } template constexpr auto begin(Container &Cont) { return Cont.begin(); } template constexpr auto end(const Container &Cont) { return Cont.end(); } template constexpr auto end(Container &Cont) { return Cont.end(); } template constexpr auto cbegin(const Container &Cont) { return Cont.cbegin(); } template constexpr auto cend(const Container &Cont) { return Cont.cend(); } template constexpr auto rbegin(const Container &Cont) { return Cont.rbegin(); } template constexpr auto rbegin(Container &Cont) { return Cont.rbegin(); } template constexpr auto rend(const Container &Cont) { return Cont.rend(); } template constexpr auto rend(Container &Cont) { return Cont.rend(); } template constexpr auto crbegin(const Container &Cont) { return Cont.crbegin(); } template constexpr auto crend(const Container &Cont) { return Cont.crend(); } // Find template InputIt find(InputIt first, InputIt last, const T &value); // Reverse template void reverse(Iter begin, Iter end); // Includes template bool includes(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2); inline namespace _V1 { // IsPermutation template bool is_permutation(ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2); template bool is_permutation(ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, ForwardIt2 last2); // Equal template bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2); template bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2); template bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, BinaryPred p) { // Need a definition to suppress undefined_internal_type when invoked with // lambda return true; } template void iota(ForwardIt first, ForwardIt last, T value); template ForwardIt rotate(ForwardIt first, ForwardIt middle, ForwardIt last); } // namespace _V1 } // namespace std #endif // USE_RANGES_FAKE_STD_H