#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);
}
отлично работает для clang++
из ствола, но g++
из ствола терпит неудачу с сообщением об ошибке (link):Использования лямбды в инициализаторе по умолчанию GCC против лязга
error: 'this' was not captured for this lambda function
Определение point_of_cone
в области видимости пространства имен отлично работает для и то и другое.
Немного измененное определение с [this]
лямбда-захват отлично работает и для обоих, либо в глобальном, либо в локальном масштабе.
Какой компилятор прав?
отправьте этот код в свой вопрос, пожалуйста – xaxxon
@Orient Нет, я имел в виду ссылку godbolt xaxxon, где он установил неверный флаг. – Columbo
Хмм, вопрос должен быть '[&]' capture' this'. Не уверены в новых стандартах, но ответ здесь не предполагает: http://stackoverflow.com/questions/16323032/why-cant-i-capture-this-by-reference-this-in-lambda – Hayt