Ich habe versucht zu verstehen, wann und wann kein Lambda mit einer Capture-Standard-Odr verwendet eine Variable mit automatischer Speicherdauer im umgebenden Bereich definiert (aufgefordert von diese Antwort ). Beim Erkunden stieß ich auf eine kleine Neugier. GCC und Clang scheinen bezüglich der Wertkategorie des ID-Ausdrucks n
im folgenden Code nicht übereinzustimmen:
Clang kompiliert den Code erfolgreich, während GCC dies nicht tut ( error: use of deleted function
). Welches ist korrekt? Oder ist das etwas nicht spezifiziert oder implementierungsdefiniert?
Das Binden eines Verweises auf ein Objekt soll es odr-verwenden und dies wird bestätigt, indem der Capture-Standard des Lambdas entfernt wird und beobachtet wird, dass beide Compiler dann beschwören, dass n
nicht ohne Capture-Default implizit erfasst werden kann.
Die Kennzeichnung des Lambda als mutable
macht keinen nennenswerten Unterschied zur Ausgabe des Compilers.
Tags und Links c++ lambda language-lawyer c++17 value-categories