If you don't want to abuse std::initializer_list to create literal-like
lists of values, I wonder if using an array reference would do the
trick:
template<ranges::input_range R1, class V2, std::size_t N,
class Pred = ranges::equal_to,
class Proj1 = std::identity, class Proj2 = std::identity>
requires std::indirectly_comparable<ranges::iterator_t<R1>, const V2*,
Pred, Proj1, Proj2>
constexpr bool equal( R1&& r1, V2 const (&r2)[N], Pred pred = {},
Proj1 proj1 = {}, Proj2 proj2 = {});
[...]
What are your thoughts on this?