win32-g++ ошибка на for_each и лямбда

Я знаю, что эта тема часто включается в stackru, но дело здесь в другом: следующий код компилируется с MsVC++ 2013, но не с win32-g++. Есть ли способ заставить его работать с обоими компиляторами?

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;



int main()
{
    vector<int>my_vector;
    for(int i=0; i < 6; i++)
        my_vector.push_back(i);
    for_each( my_vector.begin(), my_vector.end(), [ ](int  n){cout<<n;});
    return 0;
}

Сообщенные ошибки

||=== stdtest, Debug ===|
D:\dev\CplusPlus\stdtest\main.cpp||In function 'int main()':|
D:\dev\CplusPlus\stdtest\main.cpp|13|warning: lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by default]|
D:\dev\CplusPlus\stdtest\main.cpp|13|error: no matching function for call to 'for_each(std::vector<int>::iterator, std::vector<int>::iterator, main()::<lambda(int)>)'|
D:\dev\CplusPlus\stdtest\main.cpp|13|note: candidate is:|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_algo.h|4436|note: template<class _IIter, class _Funct> _Funct std::for_each(_IIter, _IIter, _Funct)|
D:\dev\CplusPlus\stdtest\main.cpp|13|error: template argument for 'template<class _IIter, class _Funct> _Funct std::for_each(_IIter, _IIter, _Funct)' uses local type 'main()::<lambda(int)>'|
D:\dev\CplusPlus\stdtest\main.cpp|13|error:   trying to instantiate 'template<class _IIter, class _Funct> _Funct std::for_each(_IIter, _IIter, _Funct)'|
||=== Build finished: 3 errors, 1 warnings (0 minutes, 0 seconds) ===|

Я должен добавить, что я предполагаю, что стандарт C++11 включен, потому что "включен по умолчанию". В случае, если я ошибаюсь, мне трудно узнать, как изменить переключатели компилятора с Code::Blocks.

1 ответ

Оказывается, я был введен в заблуждение утверждением, что -sdd=C++11 "включен по умолчанию". Я закончил тем, что нашел способ включить его с помощью Project > Build Options> настройки компилятора, а затем щелкнул флажок "g ++ следовать настройкам языка C++11 ISO C++".

Для тех, кто работает с QtCreator, добавьте следующую строку в файл проекта: QMAKE_CXXFLAGS += -std= C++ 11

Другие вопросы по тегам