vor einiger Zeit bemerkte ich, dass in Visual C++ 10 ADL fehlschlägt, wenn mindestens eines der Argumente ein Lambda ist.ADL schlägt fehl, wenn Lambda-Argumente vorhanden sind?
std::vector<float> vec;
for_each(begin(vec), end(vec), [](float) {});
Die oben nicht auf VC++ 10 und 11 (Beta) (Beginn und Ende gefunden über ADL) zu kompilieren. Wenn ich die Lambda-Funktion in eine reguläre freie Funktion umwandele, funktionieren die Dinge wie erwartet.
Ich habe auf Herb Sutters Blog einmal gefragt und auch ein paar Beiträge auf msdn connect gelesen und die üblichen Antworten waren: Dies ist ein Fehler, wir haben nicht den neuesten Standard der Lambdas implementiert, die - zu dieser Zeit - recht war verständlich. Die Dinge waren noch nicht in einer gebackenen Form. Auf MS connect gab es auch beunruhigende Kommentare, dass dies nicht für die nächste Version behoben werden wird, d. H. Vc 11.
Meine Frage ist, ist dieser Code erwartet unter dem C++ 11-Standard arbeiten? Das kann ich mir nicht vorstellen. Muss ich wirklich for_each und andere Algorithmen mit std :: voranstellen, wenn ich lambdas verwende? Ich vermute irgendwie, dass dieses Verhalten nicht nach vC++ 11 Release ändern wird.
welche freie Funktion tun Sie nutzen? –
etwas so einfach wie void f (float) {} funktioniert sogar. oder das Lambda außerhalb des Funktionsaufrufs deklarieren: auto f = [] (float) {}; –