Сегодня я наткнулся на одну очень не приятную багу. Рассмотрим следующий код.
#include <iostream>
#include <map>
using namespace std;
int main(){
map<int,int> m;
m[0]=m.size();
cout<<m[0]<<endl;
}
Как вы думаете, что выведет программа? Логично было бы 0. Ведь map изначально пуст. И Visual Studio 2008 express действительно выводит 0. Но вот если пользоваться g++ то на выходе окажется единица. Меня давно предупреждали в ЛКШ, что студия является компилятором неизвестного языка, но тут g++ повёл себя не адекватно. Если я правильно понимаю, то сначала должен вычисляться правый операнд оператора присвоить. Если я не прав, то объясните где. А если кто знает что-то подобное, то прошу поделиться опытом.