Aridade de um lambda genérico

É possível deduzir a aridade de um lambda não genérico acessando suaoperator().

template <typename F>
struct fInfo : fInfo<decltype(&F::operator())> { };

template <typename F, typename Ret, typename... Args>
struct fInfo<Ret(F::*)(Args...)const> { static const int arity = sizeof...(Args); };

Isso é legal e elegante para algo como[](int x){ return x; } Enquanto ooperator() não tem modelo.

No entanto, lambdas genéricas fazem o modelo dooperator() e só é possível acessar uma instanciação concreta do modelo - o que é um pouco problemático porque não posso fornecer manualmente argumentos de modelo para o modelooperator() como eu não sei qual é a sua aridade.

Então, é claro, algo como

auto lambda = [](auto x){ return x; };
auto arity = fInfo<decltype(lambda)>::arity;

não funciona

Não sei no que transmitir nem sei quais argumentos do modelo fornecer (ou quantos) (operator()<??>)
Alguma idéia de como fazer isso?

questionAnswers(5)

yourAnswerToTheQuestion