Güncelleme: Alt alıntıda Çekirdek başkanının söz verdiği gibi, kod artık biçimsiz :
Bir Eğer tanımlayıcı bir de basit bir yakalama olarak görünür Bildiricisi-id bir parametrenin lambda Bildiricisi sitesindeki parametre beyanı-madde , bir program kötü oluşturulur.
Bir süre önce lambdalarda isim arama ile ilgili birkaç sorun vardı. N2927 ile çözüldü :
Yeni ifade, yakalanan varlıkların kullanımlarını yeniden eşleştirmek için artık aramaya dayanmamaktadır. Bir lambda'nın bileşik ifadesinin iki geçişte işlendiği veya bu bileşik ifadesindeki herhangi bir adın kapanış türünün bir üyesine çözümlenebileceği yorumlarını daha açık bir şekilde reddeder .
Arama her zaman lambda ifadesi bağlamında yapılır , hiçbir zaman bir kapatma türünün üye işlev gövdesine dönüşümden "sonra" yapılmaz . Bkz. [Expr.prim.lambda] / 8 :
Lambda-ifadenin 'in bileşiği ile ifade verir fonksiyonu gövdesi işlev çağrısı operatörün ([dcl.fct.def]), ancak adı arama amacıyla, [...], bileşik-ifadesi bağlamında düşünülmektedir lambda-sentezleme . [ Örnek :
struct S1 {
int x, y;
int operator()(int);
void f() {
[=]()->int {
return operator()(this->x+y); // equivalent to: S1::operator()(this->x+(*this).y)
// and this has type S1*
};
}
};
- son örnek ]
(Örnek ayrıca, aramanın, kapama türünün oluşturulan yakalama üyesini bir şekilde dikkate almadığını açıkça ortaya koymaktadır.)
Ad foo
, yakalamada (yeniden) beyan edilmemiştir; lambda ifadesini çevreleyen blokta bildirilmiştir. Parametre foo
, bu dış blokta yer alan bir blokta bildirilir ( ayrıca lambda parametrelerinden de açıkça bahseden [basic.scope.block] / 2'ye bakın ). Arama sırası açıkça iç bloklardan dışa doğru doğrudur . Dolayısıyla parametre seçilmelidir, yani Clang doğrudur.
Yakalamayı bir başlatma-yakalama yapacak olsaydınız , yani foo = ""
bunun yerine foo
, cevap net olmazdı. Bunun nedeni, yakalamanın artık aslında "bloğu" verilmeyen bir bildirimi tetiklemesidir. Bu konuda çekirdek sandalyeye mesaj attım, kim cevapladı
Bu 2211 numaralı sayıdır (kısa bir süre sonra open-std.org sitesinde yeni bir sayı listesi görünecek, maalesef bu sorunlardan biri olan birkaç sorun için yer tutucularla birlikte; Kona'dan önce bu boşlukları doldurmak için çok çalışıyorum ayın sonunda toplantı). CWG bunu Ocak telekonferansımızda tartıştı ve yön, eğer bir yakalama adı da bir parametre adı ise, programı kötü biçimlendirmek.