#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]
は、グローバル スコープまたはローカル スコープの両方でも正常に機能します。
どのコンパイラが正しいですか?