Ich habe mein erstes größeres Projekt mal testweise in VS-2010 übernommen und bin sofort über ein Problem in der STL gestolpert. Ein std::set<FOO>::iterator liefert in VC-2010 jetzt eine const FOO & Referenz!
Das Ändern von Objekten in einem std::set war sowieso nur erlaubt, wenn sich die Reihenfolge nicht ändert.
Die Folge ist, dass der nachfolgende Code in VC-2010 nicht mehr kompiliert.
#include <set>
struct S_FOO
{
unsigned long m_dw1, m_dw2;
// simplified sample without bool operator<
};
class CMySet : public std::set<S_FOO>
{
public:
void SomethingSpecial()
{
// Order must not be changed!
for (iterator it=begin(); it!=end(); ++it)
it->m_dw1 = 0; // <----- C3892!
}
};
int _tmain(int argc, _TCHAR* argv[])
{
CMySet myset;
myset.SomethingSpecial();
return 0;
}
Man erhält den Fehler C3892: ‚it‘ : you cannot assign to a variable that is const
Das und noch einige andere Breaking Changes wurden gestern in VC-Blog veröffentlicht: