Похоже, что clang (3.4) автоматически принимает некоторый С++ 11 (например, auto, for (:)) без специального флага (хотя и создает предупреждение), но не другие части (например, lambdas).
Например, следующие компиляции clang++ c++11.success.cpp
:
#include <vector>
int main( int argCount, char ** argVec )
{
std::vector<int> vec;
for( auto & item : vec )
{
++item;
}
return 0;
}
но это не работает clang++ c++11.failure.cpp
:
#include <vector>
int main( int argCount, char ** argVec )
{
std::vector<int> vec;
auto lambda = [] ( int & foo ) { return ++foo; }; //This line fails at []
for( auto & item : vec )
{
lambda( item );
}
return 0;
}
С clang++ c++11.failure.cpp -std=c++11
, конечно, это удается.
Я не смог найти какую-либо конкретную документацию о том, какие функции c++11
поддерживаются без -std=c++11
и почему. У кого-нибудь есть ключ?