Вероятная проблема заключается в том, что первый компилятор хочет получить using namespace std;
, прежде чем разрешить использование недекорированных идентификаторов из этого пространства имен (например, for_each
), тогда как второй является чрезмерно разрешающим и не требует его.
Конечно, как горячо отмечали другие ответы и комментарии, есть, вероятно, предпочтительные альтернативы, такие как явное написание std::for_each
в каждом случае или использование с использованием декларации (using std::for_each;
) вместо более широкого с использованием директивы (using namespace std;
) - но этот (хороший) совет не является ответом на ваш вопрос о том, почему один компилятор будет диагностировать ошибка, пока другой нет; -).