Сабж. Вот есть у меня какой то хитрый контейнер и в нем есть итератор и все что положено. Я могу делать обычный цикл
for(auto I=arr.begin(); I!=arr.end(); ++I){ ... }
Могу сделать foreach
for(T& x:arr){ ... }
Но я могу ведь сделать такую штуку
class Arr{
...
struct Cell{
T& operator *(){...}
T* operator ->(){...}
... // всякие методы рассказывающие об элементе контейнера
};
struct iterator: public Cell{
Cell& operator *(){ return *this; }
...
};
};
for(auto& x:arr){ ... }
Из бонусов - меньше букв писать при организации цикла. Из плохого - это как то наверное не очевидно для пользователя?
Вопрос - насколько это вообще плохое решение и почему.