C++14 generic lambdas are a very cool way to generate a functor with an operator ()
that looks like this:
template <class T, class U>
auto operator()(T t, U u) const;
But not like this:
template <class T>
auto operator()(T t1, T t2) const; // Same type please
Nor like this:
template <class T, std::size_t N>
auto operator()(std::array<T, N> const &) const; // Only `std::array` please
Nor like this (although this gets a bit tricky to actually use):
template <class T>
auto operator()() const; // No deduction
C++14 lambdas are fine, but C++20 allows us to implement these cases without hassle.