Убил два дня на отладку, пытаясь понять, почему код работает неправильно.
Ошибка была такая:
Y const & A::foo( X x )
{
Y * pY = NULL;
map<X,Y>::iterator mapIter = m_.find(x);
// ...
switch( ... )
{
case zzz:
{
// Здесь локальный итератор с тем же именем перекрывает объявленную ранее переменную того же типа.
map<X,Y>::iterator mapIter = ... ;
// Здесь я на автопилоте обращаюсь к объявленной ранее переменной
pY = &mapIter->second;
}
}
}
Вопрос в том, каким мерами можно подстраховаться от подобных ошибок (опции компилятора, стиль кодирования)?