Arity eines generischen Lambda

s ist möglich, die Arität eines nicht-generischen Lambda zu bestimmen, indem auf dessen @ zugegriffen wiroperator().

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); };

Das ist schön und gut für so etwas wie[](int x){ return x; } als dieoperator() wird nicht als Vorlage verwendet.

Allerdings tun generische Lambdas die Vorlageoperator() und es ist nur möglich, auf eine konkrete Instanziierung der Vorlage zuzugreifen - was etwas problematisch ist, da ich keine Vorlagenargumente für das @ manuell bereitstellen kaoperator() Da ich nicht weiß, was seine Arität ist.

Also natürlich so etwas wie

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

funktioniert nicht.

Ich weiß nicht, wohin ich casten soll, und ich weiß nicht, welche Vorlagenargumente ich bereitstellen soll (oder wie viele) operator()<??>).
Irgendwelche Ideen, wie das geht?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage