View Full Version : [C++0x] Bug di Visual Studio 2010
tomminno
31-07-2010, 14:50
Mi è capitato di scrivere questo codice semplice semplice:
for_each(a.begin(),a.end(), [&](const A & aa) {
for_each(aa.B().begin(),aa.B().end(), [&](const B & bb) {
...
});
});
E ho perso lo scope della classe in cui è inserito il codice.
Poi trovo questo: http://connect.microsoft.com/VisualStudio/feedback/details/537366/c-nested-lambda-functions-lose-scope
Insomma tocca attendere il primo SP per usare a pieno le lambda in Visual Studio...
pabloski
31-07-2010, 16:12
speriamo non riprendano i viziacci che avevano fino alla versione '97 altrimenti ci sarà da sgobbare notti intere a fare i cacciavitari cercatori di bug :D
Mi è capitato di scrivere questo codice semplice semplice:
for_each(a.begin(),a.end(), [&](const A & aa) {
for_each(aa.B().begin(),aa.B().end(), [&](const B & bb) {
...
});
});
E ho perso lo scope della classe in cui è inserito il codice.
Poi trovo questo: http://connect.microsoft.com/VisualStudio/feedback/details/537366/c-nested-lambda-functions-lose-scope
Insomma tocca attendere il primo SP per usare a pieno le lambda in Visual Studio... si, mi ero accorto anche io che poi da dentro le lambda expressions non vedi piu alcune cose che stanno fuori: io per esempio mi sono accorto che non riuscivo a vedere i tipi dichiarati nello stesso scope della chiamata for_each, per esempio:
void test() {
class Foo {};
string str = "pappappero";
for_each(str.begin(), str.end(), [=] (char ch) {
Foo foo; // erroreh!!
// ...
});
}
ma non dovrebbe essere normale? se pensi che quella lambda expression é del tutto assimilabile ad un funtore é come se io facessi:
void test() {
class Foo {};
string str = "pappappero";
class Functor {
public:
void operator () (char ch) {
Foo foo; // errore?
// ...
}
} f;
for_each(str.begin(), str.end(), f);
}
e traducendo il codice in questa maniera mi sembra normale che ci sia un errore, non mi sembra un bug.
ma non dovrebbe essere normale?
Non e' normale, perche' se usi la lambda non hai piu' l'istanza dell'oggetto con cui interagire con l'ambiente. E in effetti lo standard prevede di specificare con quali variabili interagire (oppure, come nel caso di tommino, specificare tutte le variabili, usando [&]).
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.