myślę, że to dobrze uformowane, nie znalazłem prosty oświadczenie (sformułowanie czasami brakuje w jasności/ilustracji dla niektórych sytuacjach), ale myślę, że można wywnioskować:
§5.1.2/23 :
przechwytywanie następnie przez elipsy jest Dodatek (14.5.3). [Przykład:
template<class... Args>
void f(Args... args) {
auto lm = [&, args...] { return g(args...); };
lm();
}
- przykład end]
- Przechwytywanie następnie przez elipsy implikuje
args
w lambda wychwytu jest przykładem przechwytywanie (w tym przypadku jawne), a godnym uwagi faktem jest to, że args
jest paczką parametrów identyfikator. Ten krótki akapit ma wyłącznie za zadanie opisanie, jak przechwytywania lambda zatrzymuje się, co pokazuje, że pakiety parametrów mogą być przechwytywane, nawet jeśli ich celem nie jest , pozwalając im na przechwycenie do .
§5.1.2/12.
jednostka zostaje schwytany jeśli to jest zrobione wyraźnie lub dorozumiany [...]
§3/3:
jednostka jest wartość Przedmiotem odniesienie, funkcja wyliczający, typ członkiem klasy, szablon, szablon specjalizacji, nazw, parametr opakowanie, lub to.
Od tego zakładam parametrów paczki są podmioty, które mogą być uchwycone jawnie lub niejawnie, a więc stosuje się takie same zasady jak w przypadku zmiennych Chwytając zwykłych, z wyjątkiem, że opakowania parametrów zostanie odpowiednio rozszerzona.
Domyślam się, że twoje pytanie (i ta sama argumentacja) może być równie dobrze zastosowane do zmiennych referencyjnych, na przykład (It is unspecified whether or not a reference requires storage. §8.3.2/4). Wygląda na to, że jesteś zainteresowany, kiedy masz pozwolenie na odwołanie się do zestawu parametrów o identyfikatorze wewnątrz lambda.
Możesz myśleć tak samo o zmiennych referencyjnych w zakresie zewnętrznym, ponieważ możesz mieć do nich dostęp, ale nie możesz nawet uzyskać dostępu do identyfikatora oryginalnej zmiennej.
Są tak eteryczne jak paczki parametrów.
Wiem, że możesz je przechwycić jawnie, ale nie widziałem niczego, co mogłoby skutkować "czymkolwiek możesz przechwycić jawnie, możesz przechwycić niejawnie i na odwrót". – chris
Jeśli jest dobrze uformowany, wierzę, że spowoduje nieskończoną rekurencję. :-) Nie jestem pewien, co standard mówi o tym. Spodziewam się nieokreślonego zachowania. ;-) Jeśli tak, to znaczy, że parsowanie tego kodu może mieć jakikolwiek rezultat, nawet jeśli wyrażenie paczka wewnątrz lambda jest dobrze uformowane. :-) – Omnifarious
dzięki omburarious - naprawiłem nieskończony problem rekursji. –