template <typename InputIt, typename OutputIt>
constexpr inline OutputIt unique_copy(InputIt first, InputIt last, OutputIt d_first);
template <typename InputIt, typename OutputIt, typename BinaryPredicate>
constexpr inline OutputIt unique_copy(InputIt first, InputIt last, OutputIt d_first, BinaryPredicate p);
These functions are similar to std::unique_copy, but they are guaranteed not to construct any temporary elements. Because of this, multidim::unique_copy has the following requirements:
InputIt must meet the requirements of LegacyInputIteratorOutputIt must meet the requirements of LegacyOutputIterator*std::declval<OutputIt>() = *std::declval<InputIt>() must be validInputIt does not meet the requirements of LegacyForwardIterator, then OutputIt must meet the requirements of LegacyForwardIterator and *std::declval<OutputIt>() == *std::declval<InputIt>() (or p(*std::declval<OutputIt>(), *std::declval<InputIt>()) for predicate version) must be valid and convertible to bool *std::declval<InputIt>() == *std::declval<InputIt>() (or p(*std::declval<InputIt>(), *std::declval<InputIt>()) for predicate version) must be valid and convertible to bool