#include #include template Iterator Find(const T& value, Iterator first, Iterator last) { using tag = typename std::iterator_traits::iterator_category; if constexpr (std::is_convertible_v) { auto i = std::lower_bound(first, last, value); if (i != last && !(value < *i)) { return i; } else { return last; } } else { return std::find(first, last, value); } }