Heute habe ich diesen Code"auto" Variable in Lambda in seinem eigenen initializer verwendet
#include <cstdio>
auto terminal = [](auto term)
{
return [=] (auto func)
{
return terminal(func(term));
};
};
Überraschenderweise GCC accepts it. Clang lehnt es ab, weil es terminal
in seinem eigenen Initializer verwendet und deklariert wird.
Ich habe den Fehler erwartet, dass der Klang gab, aber ist es wirklich schlecht geformt? Oder muss der Code akzeptiert werden?
Dies scheint polymorphe Lambdas zu verwenden, die ein Merkmal in C++ 14 sind. Überprüfe, ob deine GCC-Version und/oder deine Clang-Version polymorphe Lambdas unterstützt. – YoungJohn
@YoungJohn, Die GCC-Version macht es klar, wenn sie den Code kompiliert. Ich kann mit Zuversicht sagen, dass die Clang-Version auf Coliru beide polymorphe Lambdas unterstützt und den Code nicht kompiliert. – chris
@ YoungJohn danke für Ihre Ratschläge. Ich habe GCC überprüft und es unterstützt polymorphe Lambdas (da es mein Snippet akzeptiert und ausführt). Clang [scheint auch sie zu unterstützen] (http://coliru.stacked-crooked.com/a/e89ece0828ca7484). –