#include <cassert>
#include <cmath>
int main()
{
struct point_of_cone
{
double x, y;
double z = [&] { using std::sqrt; return sqrt(x * x + y * y); }();
};
point_of_cone p = {3.0, 4.0};
assert(p.z == 5.0);
}
Adaequat für clang++
vom Stamm, aber für g++
vom Stamm schlägt mit Fehlermeldung (link):Lambda Verwendung in gcc Standardinitialisierung vs Klirren
error: 'this' was not captured for this lambda function
Definition von point_of_cone
in Namespacebereich arbeitet für die Fein beide.
Leicht modifizierte Definition mit [this]
Lambda-Capture funktioniert auch für beide im globalen oder lokalen Bereich gut.
Welcher Compiler ist richtig?
diesen Code in Ihrer Frage bitte posten – xaxxon
@Orient Nein, ich bezog mich auf xaxxon godbolt Link, wo er die falsche Flagge gesetzt. – Columbo
Hmm, die Frage ist, sollte '' diese ''erfassen. Nicht sicher über neue Standards, aber die Antwort hier schlägt nicht vor: http://stackoverflow.com/questions/16323032/why-cant-i-capture-this-by-reference-this-in-lambda – Hayt