#include template Iterator Find(const T& value, Iterator first, Iterator last) { typename iterator_traits::iterator_category cat; using category = typename std::iterator_traits::iterator_category; if constexpr (std::is_same_v) { Iterator l = first; Iterator r = last; while (l < r) { Iterator mid = l + (r - l) / 2; if (value < *mid) { r = mid; } else { l = mid + 1; } } r--; if (*r == value) { return r; } return last; } else { for (; first != last; ++first) { if (*first == value) return first; } return last; } }