Проблема с этой настройкой заключается в том, что, по крайней мере в C ++ 03, вы не можете использовать локальный функтор в качестве аргумента шаблона, потому что он не имеет внешней связи.Это означает, что с технической точки зрения приведенный выше код не является законным.Тем не менее, они исправляют это в C ++ 0x, поскольку это довольно глупое ограничение, и поскольку VS2010 имеет элементарную поддержку C ++ 0x, приведенный выше код вполне подходит.
Короче говоря, ответ на ваш вопросв том, что в этом нет ничего плохого, если вы используете компиляторы, совместимые с C ++ 0x, но в противном случае вам, вероятно, следует воздерживаться от этого, чтобы максимизировать кросс-компиляторную совместимость.