#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):
ошибка: 'this' не была записана для этой лямбда-функции
Определение point_of_cone
в области пространства имен отлично подходит для обоих.
Немного измененное определение с [this]
лямбда-захватом отлично работает и для обеих сторон, либо для глобальной или локальной области.
Какой компилятор прав?