ich 5.1.5/3 erraten ist, was Sie verhindert, dass ein Lambda die Art und Weise verwenden Sie es benutzen würden, tut mir leid:
[...] Ein Lambda-Ausdruck ist nicht in einem unevaluierten Operanden auftreten (Klausel [expr]), in einem Template-Argument, in einer Alias-Deklaration, in einer typedef-Deklaration oder in der Deklaration einer Funktion oder Funktionsvorlage außerhalb ihres Funktionskörpers und Standardargumenten. [Hinweis: Es soll verhindert werden, dass Lambdas in einer Signatur erscheinen. - Endnote] [...]
Das heißt, C++ 14 ist können Sie einen Elementtyp definieren Vorlagen verwenden, wie im folgenden Beispiel:
template<typename F>
struct S;
template<typename R, typename... Args>
struct S<R(Args...)> {
using member = R(Args...);
R operator()(Args...) { return R{}; }
member M;
};
template<typename R, typename... Args>
R S<R(Args...)>::M(Args...) { return R{}; }
int main() { S<void(int)> s; }
Was ist der Nutzen von der Art ist, alias? Sie haben bereits festgestellt, dass dies die Fähigkeit einschränkt, das Mitglied in der Klasse zu definieren. – chris
@chris vielleicht will er es als Typ für 'std :: function' verwenden? –
Ich erkunde gerade die dunklen Ecken des C++ Standards, um neue Wege zu finden, generischen Code zu schreiben – Gaetano